我正在测试一段简单的代码,以了解如何使用队列(以及练习向量)。
我写了这段代码:
#include "stdafx.h"
#include <iostream>
#include <queue>
struct msgInfo //contains the attributes as gleaned from the original (IP) message
{
int age;
std::string name;
};
using namespace std;
int main ()
{
vector<vector<queue<msgInfo>>> nodeInc; //container for messages
int qosLevels = 7; //priority levels
int nodes = 5; //number of nodes
vector<queue<msgInfo>> queuesOfNodes(qosLevels);
int i;
for (i=0; i<nodes; i++)
{
nodeInc.push_back(queuesOfNodes);
}
msgInfo potato, tomato, domato, bomato;
potato.age = 2;
potato.name = "dud";
tomato.age = 3;
tomato.name = "bud";
domato.age = 4;
domato.name = "mud";
bomato.age = 5;
bomato.name = "pud";
nodeInc[2][2].push(potato);
nodeInc[2][2].push(tomato);
nodeInc[2][3].push(domato);
nodeInc[2][3].push(bomato);
for (int j = 0; j < 2; j++) //simple loop for testing: for each round, output the age of only one 'msgInfo'
{
cout << j << endl;
for (int k = (qosLevels-1); k >= 0; k--)
{
if (!nodeInc[2][k].empty())
{
cout << nodeInc[2][k].front().age << endl;
nodeInc[2][k].pop();
return 0;
}
else
break;
}
}
}
我得到的输出是
0
1
但我想要得到的是
0
4
1
5
我在这里做错了什么?我不知道我的逻辑哪里错了——在我看来,它应该输出属于最高填充优先级的前两个元素。我认为这与我退出循环的方式有关——基本上我希望每一轮 for 循环在“弹出”之前只输出一个 msgInfo 的年龄——但我已经尝试了退出/返回/中断和它没有奏效。
编辑
我正在接收来自节点的消息。这些消息需要根据它们的属性放入队列中:节点和优先级。我决定使用 avector<vector<queue<msgInfo>>>
来执行此操作 -> 本质上是节点 < 优先级 < 消息队列>>。当访问这个容器时,我需要它一次输出一个 msgInfo 的年龄 - msgInfo 将是最高优先级队列的前面。并非所有优先级都会被填充,因此需要从最高优先级迭代到最低优先级才能找到相关元素。
我需要设计一个循环,一次输出这些(因为需要在每一轮循环之间进行其他处理)。