我正在查看一些看起来像这样的代码
map<string, int>::iterator itr = mValue.find(inName);
他们为什么定义迭代器。是不是可以这样说
int value = mValue.find(inName)
感谢。
答案 0 :(得分:16)
您可以通过取消引用迭代器来获取值(就好像它是一个指针)。这将返回一个键/值对类型,其成员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 :(得分:5)
如果地图中不存在该密钥会怎样?你会为find
回报什么?使用迭代器,您可以返回mValue.end()
。另外,迭代器允许迭代 - int不会。
答案 2 :(得分:2)
mValue.find(inName)
将迭代器返回到地图中键inName
所在的位置。如果您只想要相应的值,可以使用mValue[inName]
。
答案 3 :(得分:1)
int value = mValue.find(inName)->second;
如果发现没有返回mValue.end()
答案 4 :(得分:1)
您可能想要使用
map<string, int>::iterator itr = mValue.find(inName);
int value = mValue[inName];
mValue[inName] = 1234;
小心,它不能在const映射上工作(因为它无法插入条目)
答案 5 :(得分:1)
他们为什么定义迭代器。
因为这是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没有这样的功能。 (如果确实如此,则在未找到值的情况下必须抛出异常)
答案 6 :(得分:-2)
原件:
因为find会在找到键的地图中返回该对的位置。如果找不到,它返回NULL,因此检查
修改:更新答案,但不删除原始内容,让其他人知道错误以及为什么这个答案被低估了。
更新答案:
因为find会在找到键的地图中返回该对的位置。如果找不到,则返回map.end()。