2013-03-12 86 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

相关问题