可能重复:
Checking value exist in a std::map - C++
How to traverse a stl map/vector/list/etc?
您好,
是否可以在std :: map中搜索特定值,而不知道密钥?我知道我可以迭代整个地图,并比较值,但是可以使用std算法中的函数吗?
答案 0 :(得分:13)
好吧,你可以使用std::find_if
:
int main()
{
typedef std::map<int, std::string> my_map;
my_map m;
m.insert(std::make_pair(0, "zero"));
m.insert(std::make_pair(1, "one"));
m.insert(std::make_pair(2, "two"));
const std::string s("one");
const my_map::const_iterator it = std::find_if(
m.begin(), m.end(), boost::bind(&my_map::value_type::second, _1) == s
);
}
但这比手工制作的循环稍好一点:它仍然是O(n)
。
答案 1 :(得分:8)
如果要对值和键进行索引,可以使用Boost.Bimap。没有这个或类似的,这将必须通过暴力(=&gt;手动扫描map
)。
Boost.Bimap是双向地图 C ++库。随着Boost.Bimap你 可以创建关联容器 这两种类型都可以作为关键。
答案 2 :(得分:4)
这会有帮助吗? STL find_if
你需要有某种谓词,无论是函数指针还是实现了operator()
的对象。所谓的谓词只需要一个参数。
答案 3 :(得分:2)
使用标准函数(例如std::find_if
)有(笨拙的)方法,但这些仍然涉及迭代整个地图。 Boost.Bimap会在两个方向提供有效的索引,您可以使用Boost.Multi-Index进一步提升。