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

C++ 使用哪种方法检查std::map中是否存在数组键?,c++,C++,我在某些情况下使用以下代码: #define array_key_exists(find_key, arr) (arr.find(find_key) != arr.end()) 但我也使用简单的方法: if(SomeMap["something"]){ // key exists } 我正在使用字符串进行int映射 他们俩都一样快吗。。。?或者第二种情况下是否存在错误的可能性,假设我根本没有在映射值中使用零值?到目前为止,第二种情况似乎工作得很好。像第一种方法一样使用find并与en

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

#define array_key_exists(find_key, arr) (arr.find(find_key) != arr.end())
但我也使用简单的方法:

if(SomeMap["something"]){
    // key exists
}
我正在使用字符串进行int映射


他们俩都一样快吗。。。?或者第二种情况下是否存在错误的可能性,假设我根本没有在映射值中使用零值?到目前为止,第二种情况似乎工作得很好。

像第一种方法一样使用find并与end迭代器进行比较。如果键不存在,第二种方法将在映射中插入一个空元素。

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

第二个if语句将始终被输入,因为如果键不存在,它将被创建。(之后,后续调用将只返回现有元素。)

如果要查找某个值并在其存在时使用它,通常会执行以下操作:

std::map<T>::iterator iter = theMap.find(theKey);
if (iter != theMap.end())
{
    // use iter
}
else
{
    // value doesn't exist
}

至少,不要使用宏!没有理由在C++中:

template <typename Map, typename Key>
bool contains(const Map& pMap, const Key& pKey)
{
    return pMap.find(pKey) != pMap.end();
}
模板
bool包含(常量映射和pMap、常量键和pKey)
{
返回pMap.find(pKey)!=pMap.end();
}

但是这没有用,只需使用
count

第二个if语句将始终被输入,因为如果键不存在,它将被创建。(之后,后续调用将只返回现有元素。)

if(SomeMap["something"] != NULL){
    // key exists
}
如果要查找某个值并在其存在时使用它,通常会执行以下操作:

std::map<T>::iterator iter = theMap.find(theKey);
if (iter != theMap.end())
{
    // use iter
}
else
{
    // value doesn't exist
}

至少,不要使用宏!没有理由在C++中:

template <typename Map, typename Key>
bool contains(const Map& pMap, const Key& pKey)
{
    return pMap.find(pKey) != pMap.end();
}
模板
bool包含(常量映射和pMap、常量键和pKey)
{
返回pMap.find(pKey)!=pMap.end();
}
但是这没有用,只需使用
count

if(SomeMap["something"] != NULL){
    // key exists
}
假设没有向映射添加任何空项



假设您没有向映射添加任何空项

它是否会在每次键不存在时插入一个新的空元素?所以内存的使用会越来越高吗?@新手:不会,因为只有当它不在的时候,它才会产生。第一次之后,它将返回现有元素。但是如果我选中百万个随机字符串,它将在地图中创建百万个随机元素,并将它们的值设置为零,因为它们不存在?@Newbie:对。
操作符[]
是:“获取元素并返回它”。它不用于检查元素是否存在。因此,毫无疑问,运算符[]将比我的第一个示例慢?它是否会在每次键不存在时插入一个新的空元素?所以内存的使用会越来越高吗?@新手:不会,因为只有当它不在的时候,它才会产生。第一次之后,它将返回现有元素。但是如果我选中百万个随机字符串,它将在地图中创建百万个随机元素,并将它们的值设置为零,因为它们不存在?@Newbie:对。
操作符[]
是:“获取元素并返回它”。它不用于检查元素是否存在。因此,毫无疑问,运算符[]将比我的第一个示例慢。count()不是非常慢,因为它会对所有元素进行计数吗?为什么使用宏不好?我喜欢你解释每一个解决方案的事实。非常努力,格曼先生。@Newbie:你从哪里得到这样一个观念,那就是一切都算数?对于
map
count
将直接执行:
返回find(key)!=end()“count”,我猜它有误导性的函数名:PBtw,为什么在我的例子中使用宏是不好的?模板不会生成更大的可执行文件吗?.count()不是很慢,因为它会计算所有的可执行文件吗?为什么使用宏不好?我喜欢你解释每一个解决方案的事实。非常努力,格曼先生。@Newbie:你从哪里得到这样一个观念,那就是一切都算数?对于
map
count
将直接执行:
返回find(key)!=end()“count”,我猜它有误导性的函数名:PBtw,为什么在我的例子中使用宏是不好的?模板不会生成更大的可执行文件吗?
NULL
0
。如果存在与
0
进行比较的有效元素,则该元素将被破坏。
NULL
0
。如果存在与
0
相比较的有效元素,则该元素将被破坏。