迭代器上的C ++映射?

时间:2011-04-06 18:59:59

标签: c++ map iterator

我正在查看一些看起来像这样的代码

map<string, int>::iterator itr = mValue.find(inName);

他们为什么定义迭代器。是不是可以这样说

int value = mValue.find(inName)

感谢。

7 个答案:

答案 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()。