繁体   English   中英

在unordered_map中查找值

[英]Finding value in unordered_map

我正在使用Boost unordered_map。 我为每个条目都有一个键值对。 如何确定地图中是否存在特定值? (我不想创建另一个unordered_map,它将值存储为键,键作为值存储)

谢谢。

以下内容如何:

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;

Boost具有Bimap ,这是双向映射(即,键和值都相互引用)。 这听起来比unordered_map更适合您的需求。

您需要迭代unordered_map中的所有元素,并查看给定值是否存在。

带有自定义谓词的std::find_if算法可用于简化此操作。

为什么我们不能使用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;
        }
    }

暂无
暂无

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

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