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
相比较的有效元素,则该元素将被破坏。