我想为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,我如何不仅可以访问键,还可以访问这些值?
答案 0 :(得分:2)
我想做的是比较按键,以防它们 等于,然后比较值。
否,您无法根据值对std::multimap
进行比较。
我建议改用std::vector< std::pair<int, int> >
并简单地排序。 std::pair
中的operator<会照顾您想要的。
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
应该首先出现在上述问题中。
答案 1 :(得分:1)
您可以使用std::multiset<std::tuple<int, int>>
获得所需的效果。不需要自定义比较器,因为std::tuple
使用字典比较(您尝试实现的比较)。