2013-02-18 3 views
0

У меня есть unordered_map. который имеет клиент и связанных с ним пользователей в std :: list. Я могу распечатать свой клиент, но не знаю, как распечатать его список пользователей.print unordered_map <std :: string, std :: list <std::string>

mapType clientUserMap; 

clientUserMap.insert (mapType::value_type("C1", std::list<std::string> (userlist))); 

boost::unordered_map<std::string, std::list<std::string> > 
     ::const_iterator it = clientUserMap.find("C1"); 

std::cout << it->first << std::endl; 

ответ

2

Это список, поэтому перебираем список и печатаем.

for(std::list<std::string>::const_iterator l_it = begin(it->second); l_it != end(it->second); ++l_it) 
    std::cout << *l_it << std::endl; 

Конечно, есть еще много фантазии способов сделать это ...

+0

Когда я попытался я получил следующие ошибки предупреждение: «авто» изменит значение в C++ 0x; удалите его ошибка: ISO C++ запрещает объявление 'l_it' без типа ошибка: «начало» не было объявлено в этой области ошибка: «конец» не был объявлен в этой области ошибка: недопустимый аргумент типа «унарный * ' – user1841046

+0

@ user1841046, я использую ключевое слово из C++ 11, пожалуйста, измените его, чтобы он соответствовал типу итератора списка ... – Nim

0

Все, что вам нужно сделать, это итерация по списку:

std::list<string> const &users = it->second; 
std::for_each(users.begin(), users.end(), [](string const& user){std::cout << user << std::endl;} 
0

, как вы уже используете импульс, вы также может использовать BOOST_FOREACH для перебора списка пользователей. код будет выглядеть следующим образом:

#include <boost/foreach.hpp> 
... 

boost::unordered_map<std::string, std::list<std::string> > 
    ::const_iterator it = clientUserMap.find("C1"); 

std::cout << it->first << std::endl; 

BOOST_FOREACH(std::string user, it->second) 
{ 
    std::cout << user << endl; 
} 
Смежные вопросы