[解決済み] std::mapで範囲指定for()ループを使用するには?
2022-03-27 05:33:46
質問
C++11の範囲ベースのfor()ループの一般的な例は、いつもこのような簡単なものです。
std::vector<int> numbers = { 1, 2, 3, 4, 5, 6, 7 };
for ( auto xyz : numbers )
{
std::cout << xyz << std::endl;
}
この場合
xyz
は
int
. しかし、マップのようなものがある場合はどうなるのでしょうか? この例では、変数の型はどうなっているのでしょう。
std::map< foo, bar > testing = { /*...blah...*/ };
for ( auto abc : testing )
{
std::cout << abc << std::endl; // ? should this give a foo? a bar?
std::cout << abc->first << std::endl; // ? or is abc an iterator?
}
トラバースされるコンテナが単純なものである場合、範囲ベースの for() ループはイテレータではなく各項目を与えるように見えます。 もしイテレータだったら、まず最初にそれをデリファレンスしなければならない。
しかし、マップやマルチマップのようなものについては、どうしたらいいのか混乱しています。
(範囲指定ループはg++ 4.6+にあるのに、私はまだg++ 4.4なので、まだ試す機会がないのです)。
どのように解決するのですか?
コンテナの各要素は
map<K, V>::value_type
であり、これは
typedef
に対して
std::pair<const K, V>
. その結果、C++17以降では、次のように書くことができます。
for (auto& [key, value]: myMap) {
std::cout << key << " has value " << value << std::endl;
}
または
for (const auto& [key, value]: myMap) {
std::cout << key << " has value " << value << std::endl;
}
は、値を変更する予定がない場合。
C++11とC++14では、拡張された
for
ループで各ペアを単独で取り出し、その後、手動でキーと値を取り出します。
for (const auto& kv : myMap) {
std::cout << kv.first << " has value " << kv.second << std::endl;
}
をマークすることも検討できます。
kv
変数
const
を使用すると、値を読み取り専用で表示できます。
関連
-
[解決済み】C-stringを使用すると警告が表示される。"ローカル変数に関連するスタックメモリのアドレスが返される"
-
[解決済み] Java Mapの各エントリを効率的に反復処理するには?
-
[解決済み] JavaScriptのオブジェクトをループスルーまたは列挙するにはどうすればよいですか?
-
[解決済み] Bashで変数で定義された数値の範囲を反復処理するにはどうすればよいですか?
-
[解決済み] Goでマップにキーが含まれているかどうかを確認するには?
-
[解決済み] C++ std::map に指定されたキーが存在するかどうかを調べる方法
-
[解決済み] C++11逆レンジベースforループ
-
[解決済み】高放射能環境下で使用するアプリケーションのコンパイルについて
-
[解決済み] Intel CPU の _mm_popcnt_u64 で、32 ビットのループカウンターを 64 ビットに置き換えると、パフォーマンスが著しく低下します。
-
[解決済み】静的なMapを初期化する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] エラーが発生する。ISO C++は型を持たない宣言を禁じています。
-
[解決済み】C++のGetlineの問題(オーバーロードされた関数 "getline "のインスタンスがない
-
[解決済み】文字列関数で'char const*'のインスタンスを投げた後に呼び出されるterminate [閉店].
-
[解決済み】C++エラー:の初期化に一致するコンストラクタがありません。
-
[解決済み】C++の変数はイニシャライザーを持っているが、不完全な型?
-
[解決済み】「std::operator」で「operator<<」にマッチするものがない。
-
[解決済み】Visual C++で "Debug Assertion failed "の原因となる行を見つける。
-
[解決済み】Visual Studio 2013および2015でC++コンパイラーエラーC2280「削除された関数を参照しようとした」が発生する
-
[解決済み】オブジェクト引数のない非静的メンバ関数の呼び出し コンパイラーエラー
-
[解決済み】クラスのコンストラクタへの未定義参照、.cppファイルの修正も含む