c++ map、multimap基本用法是啥,下面这个代码看不懂

出自钱能《c++程序设计与教程》//这个程序是要统计一篇文章的段落数,并按段落单词数进行排序输出#include<iostream>#include<fstream>#i... 出自钱能《c++程序设计与教程》
//这个程序是要统计一篇文章的段落数,并按段落单词数进行排序输出
#include <iostream>
#include <fstream>
#include <sstream>
#include <vector>
#include <map>
using namespace std;
typedef multimap<int,int> Mmap;
int main()
{
ifstream in ("abc.txt");
vector<string> abc;
Mmap nums;
int n=0;
for(string s;getline(in,s);)
{
istringstream sin(s);
int num=0;
for(string t;sin >> t;num++);
if(num)
{
nums.insert(Mmap::value_type(num,n++)); //这里尤其看不懂
abc.push_back(s);
}
}
for(Mmap::iterator it=nums.begin();it != nums.end();++it)
cout <<abc[it->second]<<endl;
return 0;
}

map 和 multimap 的头文件都是 <map>?
这二者有何区别?基本用法是什么?给我举几个简单的例子吧!
展开
 我来答
zhccsd
2014-08-14 · TA获得超过4042个赞
知道大有可为答主
回答量:1347
采纳率:66%
帮助的人:917万
展开全部
map就是哈希表,用来储存成对的数据key和val
map<char,int> m;
m.insert(make_pair('0',10));//插入数据,make_pair这个东西就要看自己体会了,实在不知道怎么解释
m.insert(make_pair('1',11));
m.insert(make_pair('2',12));
下面从map中读取数据,直接把key当做下标就可以得到val,只有哈希表能做这样的事情,其他如vector,list等都不行,这是哈希表最明显的特征
cout<<m['1']<<endl;输出11
cout<<m['4']<<endl;输出0

map还有两个特点
默认情况下插入数据的时候会自动按key排序
key不能重复,重复插入无效

map和multimap唯一的区别就在于2,multimap可以插入key相同的数据,用一个例子解释
#include "stdafx.h"

#include <map>

using namespace std;

void showmap(map<int,char> mp)
{
printf("\n");
for(map<int,char>::iterator iter=mp.begin();iter!=mp.end();++iter)
{
printf("%d-%c\n",iter->first,iter->second);
}
printf("\n");
}
void showmultimap(multimap<int,char> mmp)
{
printf("\n");
for(multimap<int,char>::iterator iter=mmp.begin();iter!=mmp.end();++iter)
{
printf("%d-%c\n",iter->first,iter->second);
}
printf("\n");
}

int _tmain(int argc, _TCHAR* argv[])
{

map<int,char> mp;
mp.insert(make_pair<int,char>(0,48));
mp.insert(make_pair<int,char>(1,49));
mp.insert(make_pair<int,char>(2,50));
mp.insert(make_pair<int,char>(3,51));
mp.insert(make_pair<int,char>(1,52));

showmap(mp);

multimap<int,char> mmp;
mmp.insert(make_pair<int,char>(0,48));
mmp.insert(make_pair<int,char>(1,49));
mmp.insert(make_pair<int,char>(2,50));
mmp.insert(make_pair<int,char>(3,51));
mmp.insert(make_pair<int,char>(1,52));

showmultimap(mmp);

getchar();
return 0;
}

运行结果:

0-0
1-1
2-2
3-3

0-0
1-1
1-4
2-2
3-3

对于map,key是唯一的,如果已经存在key了,再次插入想同key无效
multimap的key可以有多个
追问
(1)看到一半  这个看不懂:
map::iterator
(2)还有上面我的代码里有那个Mmap::value_type 这个也看不懂
能帮我解释下吗 我会再加分的!

好吧第一个问题我自行百度解决了 第二个百度找不到啊
追答
iterator就是游标,stl里面的容器都有这个东西,举例说明:

for( map::iterator iter=m.begin(); iter!=m.end();++iter )
{
//这是遍历map,其他容器也是一样的语句,从begin到end这个好理解吧,++就是指向下一个数据
游标本身是一个指针,表示遍历过程中当前指向的那个数据,类型跟容器的类型一样
coutsecond();
}

nums.insert(Mmap::value_type(num,n++));
Mmap::value_type跟make_pair一样,都是把括号里面的东西转换成容易能接受的数据类型
typedef multimap Mmap;可以知道这个容器是,可以往里面插入(1,2) (2,3)这样的数据对,但是nums.insert(1,2); 这样是不行的,insert只接受一个参数,所以用make_pair把两个参数变成一个参数,具体我也不知道。
只要记住容器是什么类型就插什么数据对
map m1;
m1.insert(make_pair(1,'A'));
或者
m1.insert(map::value_type(1,'A'));
两种写法一样的,喜欢怎么写怎么写
天涯之仗剑行走
2014-08-14 · 超过53用户采纳过TA的回答
知道小有建树答主
回答量:88
采纳率:0%
帮助的人:69.2万
展开全部
map是一种关联容器,它定义了一种数据结构,类似查表功能,每一个数据都有自己的键值,通过键值可以查找和排序相应的数据。
包含了这个头文件,就可以使用map这种数据结构;
#include<iostream>
#include<vector>
#include<list>
#include<string>
#include<map>
#include<set>
#include<algorithm>
using namespace std;
int main() {
map<char,int> mymap;
map<char,int>::iterator it;
mymap['b'] = 100;
mymap['a'] = 200;
mymap['c'] = 300;
for(it=mymap.begin();it!=mymap.end();++it)
cout<<(*it).first<<"=>"<<(*it).second<<endl;
return 0;
}
追问
map::iterator  it; 
cout"<<(*it).second<<endl;
这两行看不懂。。还有 multimap呢?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式