С++ распечатывает значения карты
Итак, у меня есть такая карта:
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"));