使用哪种方法检查std :: map中是否存在数组键?

时间:2010-08-08 21:09:02

标签: c++

我在某些情况下使用以下代码:

#define array_key_exists(find_key, arr) (arr.find(find_key) != arr.end())

但我也只使用这种方法:

if(SomeMap["something"]){
    // key exists
}

我正在使用String to int map。

它们都快吗......?或者假设我没有在地图值中使用零值,第二种情况是否有可能出现错误?到目前为止,第二种情况似乎工作正常。

3 个答案:

答案 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项