Итак, у меня есть такая карта:
map<string, pair<string,string> > myMap;
И я вставил некоторые данные в мою карту, используя:
myMap.insert(make_pair(first_name, make_pair(middle_name, last_name)));
У меня вопрос, как мне распечатать все данные на моей карте?
Пожалуйста, приведите пример для моей справки.
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";
}
Если ваш компилятор поддерживает (хотя бы часть) 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"));