在std :: map中搜索特定值

时间:2010-12-06 15:23:31

标签: c++

  

可能重复:
  Checking value exist in a std::map - C++
  How to traverse a stl map/vector/list/etc?

您好,

是否可以在std :: map中搜索特定值,而不知道密钥?我知道我可以迭代整个地图,并比较值,但是可以使用std算法中的函数吗?

4 个答案:

答案 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进一步提升。