繁体   English   中英

迭代器上的C ++映射?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM