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

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

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

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

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

Мой вопрос: как распечатать все данные на моей карте? Просьба привести пример для моей справки.

Ответ 1

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";
}

В С++ 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(auto elem : myMap)
{
   std::cout << elem.first << " " << elem.second.first << " " << elem.second.second << "\n";
}

Ответ 2

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

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

Для С++ 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"));