我正在使用Boost unordered_map。每个条目都有一个关键值对。我如何确定地图中是否存在特定的值? (我不想创建另一个unordered_map,它将value存储为key和key的值)在unordered_map中查找值
谢谢。
我正在使用Boost unordered_map。每个条目都有一个关键值对。我如何确定地图中是否存在特定的值? (我不想创建另一个unordered_map,它将value存储为key和key的值)在unordered_map中查找值
谢谢。
您需要遍历unordered_map
中的所有元素并查看给定值是否存在。
带有自定义谓词的std::find_if
算法可用于简化此操作。
如何如下:
typedef std::unordered_map<int,std::string> map_type;
typedef std::unordered_map<int,std::string>::value_type map_value_type;
map_type m;
if (m.end() != find_if(m.begin(),m.end(),[](const map_value_type& vt)
{ return vt.second == "abc"; }
))
std::cout << "Value found." << std::end;
else
std::cout << "Value NOT found." << std::end;
或者使用被捕获的外部变量:
std::string value = "abc";
if (m.end() != find_if(m.begin(),m.end(),[&value](const map_value_type& vt)
{ return vt.second == value; }))
std::cout << "Value found." << std::end;
else
std::cout << "Value NOT found." << std::end;
为什么我们不能用计数方法,而不是找到的()
说明: 使用特定键计算元素 在容器中搜索键为k的元素并返回找到的元素数。由于unordered_map容器不允许重复键,这意味着如果容器中存在具有该键的元素,该函数实际返回1,否则返回零。
unordered_map<int, int> hash;
//converted array into hashMap
for(int i=0; i<6; i++)
{
hash[i];
}
//commom elemenest value is set to 1 in hashMap
for(int i =0; i<7; i++)
{
//element exist in array1
if(hash.count(i))
{
hash[i] = 1;
}
}
自定义谓词?你需要的一切已经在STL中。 `compose1(bind2nd(equal_to(),value),select2nd >())` –
ephemient
2010-12-09 05:22:43
@ephemient:这既不简单也不可读。 (另外,select2nd是STL的一部分,不是C++标准库的一部分) – 2010-12-09 05:24:28
@ephemient:这是我见过的STL最糟糕的用途之一。 – 2010-12-09 07:59:37