[英]C++ map over an iterator?
我正在查看一些看起来像这样的代码
map<string, int>::iterator itr = mValue.find(inName);
他们为什么定义迭代器。 是不是可以这样说
int value = mValue.find(inName)
谢谢。
您可以通过取消引用迭代器来获取值(就好像它是一个指针)。 这将返回一个键/值对类型,其成员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;
希望这是有道理的。
如果地图中不存在该键,会发生什么? 你会find
什么回报? 使用迭代器,您可以返回mValue.end()
。 此外,迭代器允许迭代 - 而int则不允许迭代。
mValue.find(inName)
将迭代器返回到映射inName
所在的映射中的位置。 如果您只想要相应的值,可以使用mValue[inName]
。
int value = mValue.find(inName)->second;
提供的find没有返回mValue.end()
你可能想用
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 value = mValue.find(inName)
不,std :: map没有这样的功能。 (如果确实如此,在未找到值的情况下必须抛出异常)
原版的:
因为find会在找到键的映射中返回该对的位置。 如果找不到,它返回NULL并因此返回检查
编辑:更新答案,但不删除原始内容,让其他人知道错误以及为什么这个答案被低估了。
更新答案:
因为find会在找到键的映射中返回该对的位置。 如果找不到,则返回map.end()。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.