c++ - 节点优先级队列

标签 c++ nodes priority-queue

<分区>

我已经创建了一个节点优先级队列,我已经将节点“推”入队列,假设它将按照整数值的顺序对节点进行排序。我想我错了。该节点具有属性 int freq 和 char c。我希望它按整数顺序排序,从最小到最大。

priority_queue<Node*> Q;
for(i =0; i< 95; i++){
    Q.push(node_array[i]);
}

for(i =0; i< 95; i++){
    cout<< Q.top() << endl;
    Q.pop();
}

我怎样才能让它按照“频率”的顺序排序?

最佳答案

您的 priority_queue 比较是比较指针,即内存地址。您需要提供一个节点比较二进制仿函数,它采用两个 Node* 并实现所需的逻辑:

struct node_cmp
{
   bool operator()( const Node* a, const Node* b ) const 
   {
    return a->someField < b->someField;
   }
};

用它来实例化优先级队列:

std::priority_queue<Node*, std::vector<Node*>, node_cmp> Q;

关于c++ - 节点优先级队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15646780/

相关文章:

java - Java 的 TreeMap 中的关键更新

c++ - 有人知道将您自己的语言添加到不受管理的 visual studio 2010 的任何资源吗?

c++ - 指向记录器类的指针提供给所有其他类?

c++ - 构造函数 C++ 中未定义大小的数组

c++ - 将类中的函数存储在数组中并调用它们 C++

c++ - 如何在 C++ 中打印出 BST

java - TynyVM 与 LegOS 配合使用时出现异常

javascript - const utf8Encoder = new TextEncoder();在 Node js

c++ - 嵌套节点类运算符重载 < c++

java - 如何通过访问时间而不是创建时间来优先考虑等待 CompletableFutures?