C++pair<map<string, int>::iterator, bool> ret...

intmain(){map<string,int>word_count;stringword;while(cin>>word){pair<map<string,int>:... int main()
{
map<string, int> word_count;
string word;
while( cin >> word ){
pair<map<string, int>::iterator, bool> ret = word_count.insert(make_pair(word,1));//能否详细解释这一步的过程?
if( !ret.second ){
++ret.first->second;
}
}
cout << ret.first->second << endl;
return 0;
}
没财富了,回答了我给积分。谢谢!
展开
 我来答
songwanqiang
2010-07-29 · TA获得超过2399个赞
知道小有建树答主
回答量:603
采纳率:0%
帮助的人:940万
展开全部
看一下你调用这个map类insert方法的原型。

pair <iterator, bool> insert(
const value_type& _Val
);
returns a pair whose bool component returns true if an insertion was made and false if the map already contained an element whose key had an equivalent value in the ordering, and whose iterator component returns the address where a new element was inserted or where the element was already located.
也就是说,如果map中不含有_Val中的key就返回指向这个新插入节点的迭代器和true组成的pair。如果map中含有_Val中的key就返回指向这个已经存在的节点和false组成的pair。

首先你明白这个程序是统计你输入不同的单词个数的。
pair<map<string, int>::iterator, bool> ret = word_count.insert(make_pair(word,1));
这句的意思是把word和1变成pair类型,插入到word_count中。如果map中的key不含word这个字符串,就插入,并且初始化为1,因为是第一次出现,返回指向该节点的迭代器和true组成的pair。如果map中含有,就不做任何操作,返回这个已经存在的节点的迭代器和false组成的pair。

if(!ret.second ){
++ret.first->second;
}
这个判断就是如果插入不成功,说明map中已经含有该单词了,但是insert处没做任何操作,在这里让统计数加1。ret.first是指向该单词key的迭代器。
etiu2009
2010-07-29 · TA获得超过968个赞
知道小有建树答主
回答量:481
采纳率:0%
帮助的人:506万
展开全部
map 是一个 STL 模板类,用法是 map<键类型, 值类型>。

把 map<string, int> 这个部分看作一个整体,看作为一个以 string 作为索引、int 作为值的类。

map<string, int>::iterator 是 map<string, int> 的迭代子,用于遍历/访问 map<string, int> 的元素。

map 的 insert 函数返回的是一个 pair 模板类,原型是 pair<iterator, bool>,其中 iterator 返回的是成功插入或更新的元素,bool 为 true 时表示插入了一个元素,为 false 时表示元素已经存在并更新了这个元素。这就是经典的一个函数返回两个或两个以上返回值的例子。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式