gpt4 book ai didi

c++ - 键相等时 std::multimap 的自定义比较函数

转载 作者:行者123 更新时间:2023-11-30 02:18:31 27 4
gpt4 key购买 nike

我想为 std::multimap 编写自定义比较器。我想做的是比较,如果它们相等,然后比较。我试图通过在结构中重载 operator() 并将函数对象作为 std::multimap 构造函数中的第三个参数传递来实现。

struct CustomComp {
bool operator()(int key_lhs, int key_rhs){
if (key_lhs < key_rhs) return true;
if (key_lhs == key_rhs) //Check values;
else return false;
}
};

multimap<int, int, CustomComp> myMap;

如果两者都是 int,我如何访问值,而不仅仅是键?

最佳答案

What I would like to do is to compare the keys, in case they are equal, then compare the values.

不,您不能对 std::multimap 进行比较根据

我建议使用 std::vector< std::pair<int, int> >相反,简单地排序。 operator<std::pair会照顾到你想要的。

See output here

std::vector< std::pair<int, int> > vec{ {1,2}, {1,-1},{ 2,2 } ,{ -1,1 } };
std::sort(std::begin(vec), std::end(vec));

更新:在阅读了另一个答案(即std::multiset<std::tuple<int, int>>)之后,我在想,std::multiset::insert有多糟糕? .

然后我想出了以下基准,它表明,为什么应该是 std::vector在上述问题中排在首位。

参见 Quick benchmark online here

Vector-Sort Vs Multimap-Insertion

关于c++ - 键相等时 std::multimap 的自定义比较函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52074218/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com