我正在使用Boost unordered_map。我为每个条目都有一个键值对。如何确定地图中是否存在特定值? (我不想创建另一个将值存储为键和键作为值的unordered_map)
感谢。
答案 0 :(得分:9)
以下内容如何:
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;
答案 1 :(得分:7)
Boost有Bimap,这是一个双向映射(即键和值都互相引用)。这听起来比unordered_map
更适合您的需求。
答案 2 :(得分:5)
您需要遍历unordered_map
中的所有元素,并查看给定值是否存在。
带有自定义谓词的std::find_if
算法可用于简化此操作。
答案 3 :(得分:-3)
为什么我们不能使用count方法而不是find()
描述: 使用特定键计算元素 在容器中搜索键为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;
}
}