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;
提供的查找未返回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((.
相关文章:
- 错误 C2760:语法错误:映射迭代器上意外的标记"标识符",预期的";"
- 映射迭代器与运算符不匹配
- 我可以将映射迭代器与 OpenMP 并行使用吗?
- 取消引用映射迭代器时返回对临时的引用
- 为什么映射迭代器显示基本操作数无效错误
- 复制映射迭代器对值的省略
- ->第一个/第二个到空映射迭代器开始
- 由引用集/映射迭代器传递的迭代器不可取消引用
- 在 GCC 上自动声明映射迭代器错误
- 指向同一项的两个映射迭代器是否保证相等
- 嵌套映射迭代器
- 模板标准::映射::迭代器实例化
- 映射迭代器遍历技术
- 映射迭代器与手动
- VC++11映射和多映射迭代器(重载)C2535
- 切换情况下映射迭代器的交叉初始化
- C++-映射迭代器中的if语句导致程序崩溃的原因
- 映射迭代器:一元'*'的无效类型参数(具有"int")
- 比较未引用的映射迭代器(std::pairs):C2678
- 与C++中擦除映射迭代器的行为不一致