繁体   English   中英

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

[英]Which method to use to check if array key exists in std::map?

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

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

但是我也只使用这种方法:

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

我正在使用String来int映射。

他们俩都快...吗? 还是假设第二种情况下我都没有在地图值中完全不使用零值的情况下出现错误? 到目前为止,第二种情况似乎还可以。

第二个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

与第一种方法一样,使用find并与end iterator进行比较。 如果键不存在,第二种方法将在地图中插入一个空元素。

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

假设您没有向地图添加任何NULL项

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM