2

我想为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,我如何访问值,而不仅仅是键?

4

2 回答 2

2

我想做的是比较键,以防它们相等,然后比较值

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

我建议使用std::vector< std::pair<int, int> >而不是简单地排序。operator< ofstd::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

向量排序与多图插入

于 2018-08-29T10:06:36.340 回答
1

您可以使用std::multiset<std::tuple<int, int>>. 不需要自定义比较器,因为std::tuple使用字典比较(您尝试实现的比较器)。

于 2018-08-29T10:06:27.963 回答