我有一个在c++中使用STL的multimap
的应用程序。
在multimap
中,我必须使用find
函数和我的自定义函数。假设,我的multimap的内容是{"Hello", "World"}, "{"Bye", "World"} and {"Foo", "Bar"}
。
我想搜索包含"e"本身的键,即它应该只返回"Hello"one_answers"Bye"。
我该怎么做呢?
基本上,而不是已经定义的find函数检查绝对相等,我想定义我自己的自定义相等?
c++
中的map(和multimap)是为按键进行搜索而优化的数据结构。但是,搜索是使用声明映射时使用的比较操作符执行的。如果您需要使用不同的比较(在本例中是键中包含的字母)执行任何搜索,那么您将无法利用find操作的良好性能。你唯一的选择将是执行线性搜索。另一种选择是使用不同的(自定义的)比较操作符声明映射。
您正在寻找的可以完成,但不是通过使用multimap::find
。multimap
(或map
)只使用您为键排序提供的相同比较器执行查找,并且不可能仅为(multi)map::find
使用不同的比较器。
但是,您可以使用copy_if
将您想要的键值对复制到另一个容器。
std::multimap<std::string, std::string> m{{"Hello", "World"},
{"Bye", "World"},
{"Foo", "Bar"}};
std::vector<decltype(m)::value_type> vec;
std::copy_if(m.begin(), m.end(), std::back_inserter(vec),
[](decltype(m)::value_type const& kv) {
return std::any_of(kv.first.begin(), kv.first.end(),
[](decltype(*kv.first.begin()) c) {return c == 'e';});
});
vec
将包含您感兴趣的键值对。
现场演示