【发布时间】:2013-06-06 12:17:42
【问题描述】:
考虑一下我有这个:
std::map<int, int> intMap;
intMap[11] = 21;
intMap[12] = 22;
intMap[13] = 23;
intMap[14] = 24;
int val = 0;
当我想找到map[11]的值时,如果存在,放入val我正在使用:
std::map<int, int>::iterator it = intMap.find(11);
if(it != intMap.end())
val = it->second;
有没有办法在不使用迭代器的情况下做到这一点?我的意思是,更短的方式。
int val = intMap[11] 对我来说不是一个选项,因为它会添加 11 作为 intMap 的键(如果它还不存在),我对此不感兴趣。请参阅here。
【问题讨论】:
-
我省略了我正在做的检查,已编辑。
-
这个问题意义不大。如果您知道该元素存在,则可以使用
m[x]或*m.find(x)。否则,即如果你不知道,那么你必须有一种机制来判断元素是否存在。 -
@KerrekSB,请参阅 Golgauth 的回答。
-
@SteveJessop UB 在哪里?我看不出来。
operator[]将动态初始化一个值,并且在取消引用之前,他正在针对intMap.end()测试迭代器。 -
@Arne:问题中的代码已根据我的评论进行了编辑。最初没有针对
intMap.end()的检查(并且由于仍然没有else子句,我们仍然不知道提问者的代码如何处理这种情况)。