我有一个map<int, map<int, queue<string>>
来保存客户端消息 - 第一个映射保存消息类别(1-7),第二个映射保存源客户端的ID('0s of clients),队列保存消息本身。
消息将在收到时被推送到队列中:
map<int, map<int, queue<string>>> msg_map; //map holding messages
//receive message from client
int msg = receive_fr_client(cli_id); //function to receive message from client
int msg_category = cat_check(msg); //function to process message attribute
msg_map[msg_category][cli_id].push(msg);
我需要能够迭代这个嵌套的映射,以便检查队列是否为空 - 基本上,我需要知道最高类别中哪些客户端有要发送的消息。在那之后,我将选择一个客户端(通过另一个算法,但这里不相关,所以我随机选择一个)来处理来自的消息。
我已经概念化了以下内容:有更好的方法吗?我在VS2012工作,如果可能的话,我想远离提升。
#include "stdafx.h"
#include <iostream>
#include <string>
#include <map>
#include <queue>
#include <vector>
using namespace std;
int main()
{
map<int, map<int, queue<int>>> msg_map;
msg_map[2][3].push(3);
msg_map[3][4].push(5);
msg_map[3][4].push(7);
msg_map[3][7].push(9);
msg_map[3][11].push(11);
int count = 1;
int rand_cli;
for (int i=7; i>0 && count > 0 ; i--)
{
if (msg_map.find(i) != msg_map.end())
{
map<int, queue<int>>::iterator iter;
vector<int> cli_index;
for (iter = msg_map[i].begin(); iter != msg_map[i].end(); iter++)
{
if (!iter->second.empty())
{
cli_index.push_back(iter->first);
}
}
int index_size = cli_index.size();
int rand_pos = rand() % index_size;
rand_cli = cli_index[rand_pos];
count--;
}
}
cout << rand_cli;
return 0;
}