Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何将一对作为键的地图按相反顺序排序?_C++_Sorting_Dictionary_Stl - Fatal编程技术网

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
不是左值。哦,键的负数很好,所以它的顺序相反。我喜欢!