【发布时间】:2010-12-09 05:09:26
【问题描述】:
我正在使用 Boost unordered_map。每个条目都有一个键值对。如何确定地图中是否存在特定值? (我不想创建另一个 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 更适合您的需求。
【讨论】:
value 定义了相等性)。
您需要遍历unordered_map 中的所有元素并查看给定值是否存在。
带有自定义谓词的std::find_if 算法可用于简化此操作。
【讨论】:
compose1(bind2nd(equal_to<Value>(), value), select2nd<pair<Key, Value> >())
select2nd,虽然是 STL 的一部分,但不是 C++ 标准库的一部分)