检查vector <vector <queue <msg>&gt;&gt;中是否有向量'space'是空的</vector <queue <msg>

时间:2013-03-12 02:53:39

标签: c++ vector stl queue containers

我正在玩容器,目前正试图使用​​vector<vector<queue<int>>>。这个容器的形式是这样的,'第一'向量的索引是客户端ID,'第二'向量的索引是优先级。即类型为int的消息被推入特定优先级的queue,属于某个客户。

我试图找到一种简单的方法来查明客户端是否有任何消息,即其中任何优先级是否具有非空队列。我用这段简单的代码来说明我想要做的事情:

#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]是非空的,尽管任何队列中都没有“消息”。有一个简单的方法吗?

1 个答案:

答案 0 :(得分: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