迭代器上的C++映射?

use*_*189 2 c++ iterator map

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

map<string, int>::iterator itr = mValue.find(inName);
Run Code Online (Sandbox Code Playgroud)

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

int value = mValue.find(inName)
Run Code Online (Sandbox Code Playgroud)

谢谢.

Pla*_*ure 16

您可以通过取消引用迭代器来获取值(就好像它是一个指针).这将返回一个键/值对类型,其类型second具有以下值:

map<string, int>::iterator itr = mValue.find(inName);
int value = itr->second;
Run Code Online (Sandbox Code Playgroud)

返回迭代器的原因是因为end()无法找到匹配时返回迭代器:

map<string, int>::iterator itr = mValue.find(inName);
if (itr == mValue.end())
{
  throw "No value could be found.";
}

int value = itr->second;
Run Code Online (Sandbox Code Playgroud)

希望这是有道理的.


Pup*_*ppy 5

如果地图中不存在该键,会发生什么?你会回报find什么?使用迭代器,您可以返回mValue.end().此外,迭代器允许迭代 - 而int则不允许迭代.


Mic*_*ker 2

int value = mValue.find(inName)->second;
Run Code Online (Sandbox Code Playgroud)

假设发现没有返回mValue.end()