1

私はコンテナで遊んでいて、現在はを使用しようとしていますvector<vector<queue<int>>>。このコンテナの形式は、「最初の」ベクトルのインデックスがクライアントIDであり、「2番目の」ベクトルのインデックスが優先度レベルであるようなものです。つまり、タイプのメッセージは、特定のクライアントに属する特定の優先度のメッセージに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]「属している」キューのいずれにもメッセージはありませんが、は空ではないと考えているようです。これを行う簡単な方法はありますか?

4

1 に答える 1

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
于 2013-03-12T03:13:50.270 に答える