【问题标题】:Priority Queue of Nodes [duplicate]节点的优先级队列 [重复]
【发布时间】:2013-03-26 20:30:03
【问题描述】:

我已经创建了节点的优先级队列,我已经将节点“推送”到队列中,并假设它将按照整数值的顺序对节点进行排序。我想我错了。该节点具有属性 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();
}

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

【问题讨论】:

  • 有趣的是你应该问这个问题,这是刚刚问过的:stackoverflow.com/questions/15646451/…
  • @ShafikYaghmour 可能是一些大学作业。
  • @sftrabbit 我看到了,它似乎与我的任务无关。如果我认识这个人会很有趣。
  • @AdegokeA 我提供的链接的答案与您在下面接受的链接的所有意图和目的都是相同的。

标签: c++ nodes priority-queue


【解决方案1】:

您的 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;

【讨论】:

  • 如何在队列的 main() 中使用它?
  • @AdegokeA 我刚刚添加了一个示例。
  • @AdegokeA node_cmp 应该是 third 模板参数。所以必须指定默认的second参数。
  • @AdegokeA 因为std::priority_queue 具有三个模板参数。第一个是类型并且是强制性的。以下两个是针对底层容器类型,默认为std::vector&lt;T&gt;,以及比较函子,默认为std::less&lt;T&gt;。如果要指定第三个,还需要指定第二个。
  • @DrewDormann 我没有做任何改变。我不小心点击了“编辑”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-25
相关资源
最近更新 更多