C++在迭代器上映射

C++ map over an iterator?

本文关键字:映射 迭代器 C++      更新时间:2023-10-16

我正在查看一些类似的代码

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;

提供的查找未返回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.fund(inName(之类的话吗

不,std::map没有这样的函数。(如果它这样做了,在找不到值的情况下,它将不得不抛出一个异常(

原件:

因为find会返回找到密钥的对在映射中的位置。如果找不到,则返回NULL,因此检查

编辑:更新答案,但不删除原始内容,让其他人知道哪里出了问题,以及为什么这个答案被否决。

更新答案:

因为find会返回找到密钥的对在映射中的位置。如果找不到,则返回map.end((.