C ++ распечатывает значения карты

Итак, у меня есть такая карта:

map<string, pair<string,string> > myMap;

И я вставил некоторые данные в мою карту, используя:

myMap.insert(make_pair(first_name, make_pair(middle_name, last_name)));

У меня вопрос, как мне распечатать все данные на моей карте?
Пожалуйста, приведите пример для моей справки.

34

Решение

for(map<string, pair<string,string> >::const_iterator it = myMap.begin();
it != myMap.end(); ++it)
{
std::cout << it->first << " " << it->second.first << " " << it->second.second << "\n";
}

В C ++ 11 вам не нужно прописывать map<string, pair<string,string> >::const_iterator, Ты можешь использовать auto

for(auto it = myMap.cbegin(); it != myMap.cend(); ++it)
{
std::cout << it->first << " " << it->second.first << " " << it->second.second << "\n";
}

Обратите внимание на использование cbegin() а также cend() функции.

Еще проще, вы можете использовать цикл for на основе диапазона:

for(auto elem : myMap)
{
std::cout << elem.first << " " << elem.second.first << " " << elem.second.second << "\n";
}
59

Другие решения

Если ваш компилятор поддерживает (хотя бы часть) C ++ 11, вы можете сделать что-то вроде:

for (auto& t : myMap)
std::cout << t.first << " "<< t.second.first << " "<< t.second.second << "\n";

Для C ++ 03 я бы использовал std::copy с оператором вставки вместо:

typedef std::pair<string, std::pair<string, string> > T;

std::ostream &operator<<(std::ostream &os, T const &t) {
return os << t.first << " " << t.second.first << " " << t.second.second;
}

// ...
std:copy(myMap.begin(), myMap.end(), std::ostream_iterator<T>(std::cout, "\n"));
20

По вопросам рекламы [email protected]