我找了一些代码,看起来像这样迭代器上的C++映射?
map<string, int>::iterator itr = mValue.find(inName);
他们为什么要定义一个迭代器。是不是可以这样说
int value = mValue.find(inName)
谢谢。
我找了一些代码,看起来像这样迭代器上的C++映射?
map<string, int>::iterator itr = mValue.find(inName);
他们为什么要定义一个迭代器。是不是可以这样说
int value = mValue.find(inName)
谢谢。
int value = mValue.find(inName)->second;
提供发现没有返回mValue.end()
如果该键不存在于地图存在,会发生什么?你会为find
返回什么?使用迭代器,您可以返回mValue.end()
。另外,迭代器允许迭代 - int不能。
mValue.find(inName)
将迭代器返回到地图中位置为inName
的位置。如果您只需要相应的值,则可以使用mValue[inName]
。
这是非常量,但会创建一个映射条目,如果它不存在。 (并不是说原始代码在没有价值的情况下没有那么惨重)。 – 2011-04-06 19:03:49
您可以通过取消引用迭代器来获取值(就像它是一个指针一样)。这将返回一个密钥/值对的类型,其具有的值是一个构件second
:
map<string, int>::iterator itr = mValue.find(inName);
int value = itr->second;
返回一个迭代器的原因是因为当一个匹配找不到则返回end()
迭代:
map<string, int>::iterator itr = mValue.find(inName);
if (itr == mValue.end())
{
throw "No value could be found.";
}
int value = itr->second;
希望这是有道理的。
+1对解引用迭代器的明确说明 – 2013-08-02 23:21:29
原因:
因为find会在映射中返回找到该键的位置。如果没有找到,它会返回NULL,因此检查
编辑:更新答案,但不删除原始内容,让其他人知道什么是错的,以及为什么这个答案是downvoted。
更新答:
因为发现返回对在关键是找到地图的位置。如果找不到,则返回map.end()。
未找到时不会重新生成NULL。所以-1错误的答案。 – Sjoerd 2011-04-06 19:05:03
借调在最初downvote后不删除答案。 – phooji 2011-04-06 19:44:36
@ phooji:每个人都不可能一直上网。如果您觉得自己想要退缩只是因为该人没有删除答案,您可以自由选择。 – mukeshkumar 2011-04-07 09:11:29
你可能想使用
map<string, int>::iterator itr = mValue.find(inName);
int value = mValue[inName];
mValue[inName] = 1234;
照顾,也不会一个const地图上工作(因为它将无法插入条目)
他们为什么定义一个迭代器。
,因为这是在map .find()函数返回时,包含 键和值迭代器。或者,如果找不到该值,则返回mValue.end(),因为您可以测试该值是否在地图中找到,所以它很有用。
,让你可以做的值:
map<string, int>::iterator itr = mValue.find(inName);
if(itr != map.end()) {
int value = itr->second;
// use value
}
是没可能说类似int值= mValue.find(inName)
不,的std ::地图没有这样的功能。 (如果是这样,它将不得不抛出一个例外,如果没有找到该值)
它确实有这样一个函数('operator []'),但是如果它还不存在的话(它不得不抛出异常),它会在映射中插入键的附加副作用。 – dfan 2011-04-06 19:56:02
也许upvote一些答案 – 2011-04-06 19:03:07