2013-03-12 44 views
1

我正在玩弄容器,此刻嘗試使用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]非空,雖然有任何的任何消息隊列'屬於'它。是否有捷徑可尋?

+0

它不是空的。您將它重新調整爲兩行,它們的內容是讀取'node_pri_msg [1] .resize(2)'的行,然後再使用for循環再次推入一行。你可能想要考慮你想要做的事情。你知道你問的是有多少個隊列是vector * has *,(你剛剛設置爲2),而不是每個隊列中有多少個項目,對吧? – WhozCraig 2013-03-12 02:58:55

+0

我調整了它們的大小,否則我無法將整型插入隊列中 - 我認爲它們將用NULL元素進行初始化,這是.empty()會有所幫助。這是一個錯誤的假設? – sccs 2013-03-12 03:00:41

+1

這將是一個錯誤的假設。按照需要調整矢量大小將根據需要創建對象以填充調整大小(或者在向下調整大小的情況下摧毀它們)。 – WhozCraig 2013-03-12 03:01:55

回答

1

我想你會與此得到更好的服務:

#include <iostream> 
#include <queue> 
#include <map> 

using namespace std; 

int main() 
{ 
    typedef std::queue<int> MessageQueue; 
    typedef std::map<int, MessageQueue> PriorityMap; 
    typedef std::map<int, PriorityMap> ClientMap; 

    ClientMap clients; 

    clients[10][1].push(1); 
    clients[10][1].push(2); 
    clients[11][2].push(3); 

    cout << boolalpha; 
    cout << clients[1].empty() << endl; 
    cout << clients[10].empty() << endl; 
    cout << clients[10][0].empty() << endl; 
    cout << clients[10][1].empty() << endl; 
    cout << clients[10][1].size() << endl; 

    return 0; 
} 

輸出

true 
false 
true 
false 
2 
+0

這真的有幫助,謝謝! – sccs 2013-03-12 06:35:51

相關問題