ice*_*ime 14
好吧,你可以使用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
);
}
Run Code Online (Sandbox Code Playgroud)
但这比手工制作的循环稍好一点:它仍然存在O(n).
如果要对值和键进行索引,可以使用Boost.Bimap.没有这个或类似的,这将必须通过强力(=> map手动扫描)来完成.
Boost.Bimap是一个用于C++的双向映射库.使用Boost.Bimap,您可以创建关联容器,其中两种类型都可以用作键.