我在某些情况下使用以下代码:
#define array_key_exists(find_key, arr) (arr.find(find_key) != arr.end())
但我也只使用这种方法:
if(SomeMap["something"]){
// key exists
}
我正在使用String to int map。
它们都快吗......?或者假设我没有在地图值中使用零值,第二种情况是否有可能出现错误?到目前为止,第二种情况似乎工作正常。
答案 0 :(得分:12)
将始终输入第二个if语句,因为如果该键不存在,则将创建该语句。 (之后,后续调用将只返回现有元素。)
如果要查找值并使用它(如果存在),通常会执行以下操作:
std::map<T>::iterator iter = theMap.find(theKey);
if (iter != theMap.end())
{
// use iter
}
else
{
// value doesn't exist
}
如果您只是想知道它是否在那里,而不使用它,请执行:
if (theMap.count(theKey)) // in map, count will return either 0 or 1
{
// it exists
}
else
{
// it doesn't exist
}
至少,不要使用宏!在C ++中没有理由:
template <typename Map, typename Key>
bool contains(const Map& pMap, const Key& pKey)
{
return pMap.find(pKey) != pMap.end();
}
但是没有用,只需使用count
。
答案 1 :(得分:0)
使用find和compare与end迭代器进行比较,就像第一种方法一样。如果密钥不存在,第二种方法会将空元素插入到地图中。
答案 2 :(得分:0)
if(SomeMap["something"] != NULL){
// key exists
}
假设您没有向地图添加任何NULL项