我正在玩弄容器,此刻嘗試使用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