当前位置: 首页 > 知识库问答 >
问题:

访问优先队列C++中的第一个元素

佟云
2023-03-14

下面是我的代码:

#include <iostream>       
#include <queue>          

using namespace std;

struct node
{
    node(char n, int i) { name = n; id = i; }
    void display() { cout << "name: " << name << "   id : " << id << endl; }
    friend bool operator < (node a, node b) { return a.id < b.id; }
private:
    char name;
    int id;
};

int main()
{
  queue<node> myqueue; // Actually want a priority_queue<node>

  myqueue.push(node('a',5));
  myqueue.push(node('b',9));
  myqueue.push(node('c',7));

  myqueue.front().display(); // Error when using the type I want, even if I call top() instead
}

我将再次指出,如果我使用队列而不是优先级队列,那么代码可以工作。如何访问优先级队列的前部?

共有1个答案

慕容安易
2023-03-14

您的错误是.display()不是常量成员函数。
它应该是:

void display() const { std::cout << "name: " << name << "   id : " << id << '\n';}

顺便说一句,只有在需要显式刷新的情况下才使用std::endl,因为它会使所有良好性能的希望化为乌有。

还要阅读:为什么“使用名称空间标准”被认为是坏的做法?

 类似资料:
  • 问题内容: 默认情况下,优先级队列的元素如何按照自然顺序排序,因为它没有实现可比的接口。 从文档中可以看出,元素是根据自然顺序进行排序的,但是我找不到任何关于equals方法或可比性的东西。它在内部如何发生? 所有实现的接口:可序列化,可迭代,集合,队列。 如果它实现可比性,那么为什么不在上一行说 例: 第三条打印语句也将打印[1、3、2、4],而不是打印[1、2、3、4]。为什么?应该自然排序吧

  • 该程序属于优先级队列,其中我将字符串存储为数据,队列使用链表创建。编号最少的元素(作为优先级编号)具有更高的优先级,即它将插入头节点,因此在移除(pop或出列)时,该元素将首先移除。(例如,1的优先级高于2) 〈代码〉而(tem- 它没有显示所需的输出,但正在崩溃 我将akash作为优先级1,rahul作为优先级2,neymar再次作为优先级1,它应该为最后两个printf语句打印akash和ne

  • 我正在尝试在滑动窗口中打印最大值。将窗口大小的元素,这里k=3放入优先级队列(Maxheap),然后查看值。”heap.Init(

  • 问题 怎样实现一个按优先级排序的队列? 并且在这个队列上面每次 pop 操作总是返回优先级最高的那个元素 解决方案 下面的类利用 heapq 模块实现了一个简单的优先级队列: import heapq class PriorityQueue: def __init__(self): self._queue = [] self._index = 0

  • 要求:我需要我的消息驱动bean(MDB)能够从四个不同的JMS队列中读取消息,MDB应该根据队列的优先级读取消息。 我有4个JMS队列A、B、C和D,优先级分别为8(最高)、7、6和5。因此,如果队列C中有500条消息,而队列A和B是空的。我的MDB应该使用来自队列C的消息。但是当我在高优先级队列(A或B)中收到消息时,我的MDB应该停止从C读取消息,并从高优先级队列中消耗消息(直到队列是空的)

  • 我试图实现Dijkstra算法的一个版本,以找到公共汽车从起点到终点的最短路线。不幸的是,我似乎找不到swift提供优先级队列类型的库或其他方式,所以我似乎必须自己编写代码。 话虽如此,有人能指出我做这件事的正确方向吗? 目前我的想法如下: 到目前为止这是我的代码。似乎太短太残忍了...我一定是在概念上漏掉了什么。