私はmap
このようなものを持っています:
map<string, pair<string,string> > myMap;
そして、以下を使用してマップにデータを挿入しました。
myMap.insert(make_pair(first_name, make_pair(middle_name, last_name)));
マップ内のすべてのデータを印刷するにはどうすればよいですか?
私はmap
このようなものを持っています:
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(const 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"));
C ++ 17以降では、範囲ベースのforループを構造化バインディングと一緒に使用して、マップを反復処理できます。これにより、コード内の必要なメンバーfirst
とメンバーの数が減るため、読みやすさが向上します。second
std::map<std::string, std::pair<std::string, std::string>> myMap;
myMap["x"] = { "a", "b" };
myMap["y"] = { "c", "d" };
for (const auto &[k, v] : myMap)
std::cout << "m[" << k << "] = (" << v.first << ", " << v.second << ") " << std::endl;
出力:
m [x] =(a、b)
m [y] =(c、d)