是否可以在multimap中使用自定义查找函数?
Is it possible to use custom find function in multimap?
我有一个在c++中使用STL的multimap
的应用程序。
在multimap
中,我必须使用find
函数和我的自定义函数。假设,我的multimap的内容是{"Hello", "World"}, "{"Bye", "World"} and {"Foo", "Bar"}
。
我想搜索包含"e"本身的键,即它应该只返回"Hello"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
将包含您感兴趣的键值对。
现场演示
相关文章:
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- C++自定义比较函数
- 在具有自定义对象的集合中查找值
- 尝试在自定义 QT 创建器文本编辑器中创建查找和替换循环.我似乎无法设置光标位置
- 如何在具有多个成员的自定义对象的向量上使用查找
- 通过与不同类型的值进行自定义比较来查找 std::set 的元素
- 使用算法标头查找自定义数据类型的minmax
- 使用算法查找自定义数据向量中的最大值和最小值
- C++ 标准::查找自定义比较器不起作用
- 自定义C++谓词并查找if
- 在std::set中查找由自定义比较器设置的元素
- 在 stl 映射中查找在编写自定义比较函数时不起作用,该函数会阻止键排序
- 在包含自定义类型的集合中查找
- 如何通过lambda使用自定义相等来查找在std::vector中具有一个匹配元素的元组
- 是否可以在multimap中使用自定义查找函数?
- 自定义有序集给出查找"invalid operator<"(...
- 在自定义类向量中查找
- 带有自定义类指针的矢量查找
- 迭代器查找自定义类vector的方法