是否可以在multimap中使用自定义查找函数?



我有一个在c++中使用STL的multimap的应用程序。

multimap中,我必须使用find函数和我的自定义函数。假设,我的multimap的内容是{"Hello", "World"}, "{"Bye", "World"} and {"Foo", "Bar"}

我想搜索包含"e"本身的键,即它应该只返回"Hello"one_answers"Bye"。

我该怎么做呢?

基本上,而不是已经定义的find函数检查绝对相等,我想定义我自己的自定义相等?

c++中的map(和multimap)是为按键进行搜索而优化的数据结构。但是,搜索是使用声明映射时使用的比较操作符执行的。如果您需要使用不同的比较(在本例中是键中包含的字母)执行任何搜索,那么您将无法利用find操作的良好性能。你唯一的选择将是执行线性搜索。另一种选择是使用不同的(自定义的)比较操作符声明映射。

您正在寻找的可以完成,但不是通过使用multimap::findmultimap(或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将包含您感兴趣的键值对。

现场演示

最新更新