C++ 如何将一对作为键的地图按相反顺序排序?
我有一张地图C++ 如何将一对作为键的地图按相反顺序排序?,c++,sorting,dictionary,stl,C++,Sorting,Dictionary,Stl,我有一张地图 map< std::pair<double, long>, object > myMap; mapmyMap; 基本上,我希望它按这一对排序。如何对其进行排序,使我的double按降序排列,而我的long按升序排列 所以通常在插入时,我会得到({3.2,5},{3.2,6},{4,1}),但我想要的是得到({4,1},{3.2,5},{3.2,6})。我想我可以开始考虑我自己的算法,但我希望有一种方法可以实现这样一种方式:map允许您使用std::gre
map< std::pair<double, long>, object > myMap;
mapmyMap;
基本上,我希望它按这一对排序。如何对其进行排序,使我的double
按降序排列,而我的long按升序排列
所以通常在插入时,我会得到
({3.2,5},{3.2,6},{4,1})
,但我想要的是得到({4,1},{3.2,5},{3.2,6})
。我想我可以开始考虑我自己的算法,但我希望有一种方法可以实现这样一种方式:map允许您使用std::greater
进行反向排序。有什么建议吗?没有标准的比较器可以满足您的需要。提供您自己的比较器,它给出您想要的顺序:
typedef std::pair<double, long> key; // for convenience
struct compare_keys {
bool operator()(key const & lhs, key const & rhs) {
if (lhs.first < rhs.first) return false;
if (rhs.first < lhs.first) return true;
return lhs.second < rhs.second;
}
};
通过比较修改后的对,您可以稍微缩短(并可能混淆)这一点:
return std::make_pair(-lhs.first, lhs.second)
< std::make_pair(-rhs.first, rhs.second);
return std::make_pair(-lhs.first,lhs.second)
没有标准比较器可以满足您的需要。提供您自己的比较器,它给出您想要的顺序:
typedef std::pair<double, long> key; // for convenience
struct compare_keys {
bool operator()(key const & lhs, key const & rhs) {
if (lhs.first < rhs.first) return false;
if (rhs.first < lhs.first) return true;
return lhs.second < rhs.second;
}
};
通过比较修改后的对,您可以稍微缩短(并可能混淆)这一点:
return std::make_pair(-lhs.first, lhs.second)
< std::make_pair(-rhs.first, rhs.second);
return std::make_pair(-lhs.first,lhs.second)
您看过了吗?(提示:模板参数)编写自己的functor有什么问题?“与其编写自己的排序算法,不如编写自己的排序算法”您根本没有编写算法,只是编写了一个微不足道的比较函数。如果您使用了一个独特的类型而不是一个对id,那么告诉您重载操作符>,这是一个什么样的std::greater调用。您看过了吗?(提示:模板参数)编写自己的functor有什么问题?“与其编写自己的排序算法,不如编写自己的排序算法”您根本没有编写算法,只是编写了一个微不足道的比较函数。如果您使用了一个独特的类型而不是一个pair id,那么告诉您重载操作符>,这就是std::greater调用的方式。我认为tie
不起作用-lhs.first
不是左值。哦,键的负数很好,所以它的顺序相反。我喜欢!我认为领带不起作用-lhs.first
不是左值。哦,键的负数很好,所以它的顺序相反。我喜欢!