我正在玩弄容器,此刻尝试使用vector<vector<queue<int>>>
。这个容器的形式是这样的,'第一'矢量的索引是客户端ID,'第二'矢量的索引是优先级。即类型为int
的消息被推入具有某个优先级的queue
,属于某个客户端。检查矢量<向量<queue<msg> >>中的向量'空格'是否为空
我想找到一个简单的方法来找出客户端是否有任何消息,即如果它的任何优先级有非空队列。我用这个简单的代码来说明什么,我试图做的:
#include "stdafx.h"
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
int main()
{
vector<vector<queue<int>>> node_pri_msg;
queue<int> pri_msg;
node_pri_msg.resize(2);
node_pri_msg[1].resize(2);
node_pri_msg[0].resize(2);
for (int i=0; i<2; i++)
{
node_pri_msg[i].push_back(pri_msg);
}
node_pri_msg[0][1].push(3);
if (node_pri_msg[1].empty())
{
cout << "empty-check succeeded" << endl;
}
}
,但它不工作,也就是说,它似乎认为node_pri_msg[1]
非空,虽然有任何的任何消息队列'属于'它。是否有捷径可寻?
它不是空的。您将它重新调整为两行,它们的内容是读取'node_pri_msg [1] .resize(2)'的行,然后再使用for循环再次推入一行。你可能想要考虑你想要做的事情。你知道你问的是有多少个队列是vector * has *,(你刚刚设置为2),而不是每个队列中有多少个项目,对吧? – WhozCraig 2013-03-12 02:58:55
我调整了它们的大小,否则我无法将整型插入队列中 - 我认为它们将用NULL元素进行初始化,这是.empty()会有所帮助。这是一个错误的假设? – sccs 2013-03-12 03:00:41
这将是一个错误的假设。按照需要调整矢量大小将根据需要创建对象以填充调整大小(或者在向下调整大小的情况下摧毁它们)。 – WhozCraig 2013-03-12 03:01:55