C++ 在C+中反转字母排序顺序的简单方法+;std::优先级队列?

C++ 在C+中反转字母排序顺序的简单方法+;std::优先级队列?,c++,data-structures,priority-queue,alphabetical,C++,Data Structures,Priority Queue,Alphabetical,嗨,我在解决一些排序算法的问题 我使用带有STL队列头的C++ STL PrimyIty队列,用整数的逆字母顺序排序字符串输入。 我知道有一个简单的想法,用优先级队列实现整数排序的递增顺序,如下所示 #include <queue> priority_queue<int> pq; int arr[5] = {4,3,2,1,5}; for(int i = 0; i < 5; i++) pq.push(-arr[i]); while(!pq.empty())

嗨,我在解决一些排序算法的问题

我使用带有STL队列头的C++ STL PrimyIty队列,用整数的逆字母顺序排序字符串输入。

我知道有一个简单的想法,用优先级队列实现整数排序的递增顺序,如下所示

#include <queue>

priority_queue<int> pq;
int arr[5] = {4,3,2,1,5};

for(int i = 0; i < 5; i++)
   pq.push(-arr[i]);
while(!pq.empty()) {
   cout << -pq.top() << endl;
   pq.pop();
}
//the result may be 1, 2, 3, 4, 5
#包括
优先级队列pq;
int-arr[5]={4,3,2,1,5};
对于(int i=0;i<5;i++)
质量推力(-arr[i]);
而(!pq.empty()){

cout无论如何,您不应该在实际代码中使用嵌套对来使用如此复杂的数据结构。这会使代码难以理解。什么是
pq.top().second.second.first

如果您的结构很复杂,请使用如下所示的所需成员(但使用有意义的成员名称)定义结构:

然后您应该定义一个比较运算符。它实际上只需要几行代码,并且使您的代码更具可读性。如果您愿意,它可以是嵌套的
struct

struct datastructure_comp
{
    bool operator()(const datastructure &lhs, const datastructure &rhs) const
    {
        return lhs.member1 < rhs.member2;
    }
};
然后定义比较将是微不足道的:

struct datastructure_comp
{
    bool operator()(const datastructure &lhs, const datastructure &rhs) const
    {
        return lhs.data > rhs.data; // reversed sort...
    }
};

无论如何,您都不应该在实际代码中使用嵌套对来使用如此复杂的数据结构。这会使代码难以理解。什么是
pq.top().second.second.first

如果您的结构很复杂,请使用如下所示的所需成员(但使用有意义的成员名称)定义结构:

然后您应该定义一个比较运算符。它实际上只需要几行代码,并且使您的代码更具可读性。如果您愿意,它可以是嵌套的
struct

struct datastructure_comp
{
    bool operator()(const datastructure &lhs, const datastructure &rhs) const
    {
        return lhs.member1 < rhs.member2;
    }
};
然后定义比较将是微不足道的:

struct datastructure_comp
{
    bool operator()(const datastructure &lhs, const datastructure &rhs) const
    {
        return lhs.data > rhs.data; // reversed sort...
    }
};

谢谢,但那个答案不是我想要的。我并没有问你如何制作自定义数据结构和比较运算符。我很好奇如何使用优先级队列(如pq.push(-arr[I])来制作“简单”的逆字母排序顺序;关注标题please@JunsungChoi那么你不能用简单的方法来做,因为你的数据结构并不简单。@junsungcoi你想要的答案是使用我在回答中已经提到的
std::greater
。但是专业开发人员不会使用3层deep
std::pair
,因为这会让代码很难理解。谢谢你,bu答案不是我想要的。我没有问你如何创建自定义数据结构和比较运算符。我很好奇如何使用优先级队列(如pq.push(-arr[I])来创建“简单”的逆字母排序顺序;关注标题please@JunsungChoi那么你不能用简单的方法来做,因为你的数据结构并不简单。@junsungcoi你想要的答案是使用我的答案中已经提到的
std::greater
。但是专业开发人员不会使用3级深度
std::pair
,因为这会使代码难以理解。
class datastructure 
{
    std::pair<int, std::pair<int, std::pair<int, string>>>> data;

public:
    int GetValue1() const { return data.first; }
    void SetValue1(int value) { data.first = value; }

    // other access function here...
};
struct datastructure_comp
{
    bool operator()(const datastructure &lhs, const datastructure &rhs) const
    {
        return lhs.data > rhs.data; // reversed sort...
    }
};