C ++でマップを反復処理する方法

How Iterate Over Map C



このクイックチュートリアルでは、C ++でマップを反復処理する方法を説明します。

C ++でマップを反復処理する方法は複数あります。新しいバージョンのC ++では、C ++でマップを反復処理するためのより高度な方法があります。







それぞれを1つずつ見ていきましょう。



stp :: mapでforループを使用する

countryCapitalMap という名前のマップを作成しましたキーと値のペアを挿入しました。



<にとって>>
#含む
#含む
#含む
#含む
#含む
を使用して 名前空間時間;
int主要(()。 {{
//マップを初期化します
地図>>'インド'「デリー」)。)。;
countryCapitalMap。入れる((ペア<文字列、文字列>>((「ネパール」「カトマンズ」)。)。;
countryCapitalMap。入れる((ペア<文字列、文字列>>(('中国''北京')。)。;
countryCapitalMap。入れる((ペア<文字列、文字列>>(('フランス''パリ')。)。;

// forループでイテレータを使用して反復します
にとって ((自動itr=countryCapitalMap。始める(()。;itr=countryCapitalMap。終わり(()。;itr++)。
{{
時間:::費用 <<itr->>初め// アクセスキー
<< ':'
<<itr->>2番目//アクセス値
<<時間:::endl;
}
戻る 0;
}
</にとって>>
出力
<にとって>>
中国北京
フランスパリ
インドデリー
ネパールカトマンズ
</にとって>>

ご覧のとおり、forループを使用してcountry:capital(key:value)を出力しました。





お気づきの方は、 auto を使用しました読みやすさのため、マップイテレータの型指定子。 map::iterator を使用できます明示的にも。
ノート: 出力が表示されている場合は、キーで昇順で並べ替えられています。これは、std :: mapが、提供されたComparator(バージョンC ++ 11以降)を持つソートされた連想コンテナーであるためです。コンパレータを提供しなかったため、C ++は文字列にデフォルトのコンパレータを使用しました。

stp :: mapでwhileループを使用する

forループの代わりにwhileループを使用することもできます。



<にとって>>
#含む
#含む
#含む
#include>
を使用して 名前空間時間;
int主要(()。 {{
//マップを初期化します
地図<文字列、文字列>>countryCapitalMap;
//マップにさまざまな要素を挿入します
countryCapitalMap。入れる((ペア<文字列、文字列>>(('インド'「デリー」)。)。;
countryCapitalMap。入れる((ペア<文字列、文字列>>((「ネパール」「カトマンズ」)。)。;
countryCapitalMap。入れる((ペア<文字列、文字列>>(('中国''北京')。)。;
countryCapitalMap。入れる((ペア<文字列、文字列>>(('フランス''パリ')。)。;


//マップのイテレータを作成し、beginで初期化します
自動itr=countryCapitalMap。始める(()。;
// whileループでイテレータを使用して反復します
その間 ((itr=countryCapitalMap。終わり(()。)。
{{
時間:::費用 <<itr->>初め// アクセスキー
<< ':'
<<itr->>2番目//アクセス値
<<時間:::endl;
itr++;
}
戻る 0;
}
</にとって>>
出力
<にとって>>
中国北京
フランスパリ
インドデリー
ネパールカトマンズ
</にとって>>

範囲ベースのforループの使用(C ++ 11バージョン以降)

C ++ 11バージョンを使用している場合、これはC ++でマップを反復処理するための最も洗練された方法です。従来の立方体のループを避けて、代わりにこれを使用できます。

<にとって>>
#含む
#含む
#含む

を使用して 名前空間時間;
int主要(()。 {{
//マップを初期化します
地図<文字列、文字列>>countryCapitalMap;
//マップにさまざまな要素を挿入します
countryCapitalMap。入れる((ペア<文字列、文字列>>(('インド'「デリー」)。)。;
countryCapitalMap。入れる((ペア<文字列、文字列>>((「ネパール」「カトマンズ」)。)。;
countryCapitalMap。入れる((ペア<文字列、文字列>>(('中国''北京')。)。;
countryCapitalMap。入れる((ペア<文字列、文字列>>(('フランス''パリ')。)。;


// forループでイテレータを使用して反復します
にとって ((const 自動 countryCapitalMap)。 {{
費用 <<彼。初め << ':' <<彼。2番目<<'NS';
}

戻る 0;
}
</にとって>>
出力
中国北京
フランスパリ
インドデリー
ネパールカトマンズ

キーと値のペアで範囲ベースのforループを使用する(C ++ 17バージョン以降)

このバージョンはc ++ 17以降でサポートされており、マップを反復処理するためのより柔軟な方法を提供します。マップ内のキーと値のペアに明示的にアクセスできるため、さらに読みやすいソリューションが提供されます。

<にとって>>
#含む
#含む
#含む

を使用して 名前空間時間;
int主要(()。 {{
//マップを初期化します
地図<文字列、文字列>>countryCapitalMap;
//マップにさまざまな要素を挿入します
countryCapitalMap。入れる((ペア<文字列、文字列>>(('インド'「デリー」)。)。;
countryCapitalMap。入れる((ペア<文字列、文字列>>((「ネパール」「カトマンズ」)。)。;
countryCapitalMap。入れる((ペア<文字列、文字列>>(('中国''北京')。)。;
countryCapitalMap。入れる((ペア<文字列、文字列>>(('フランス''パリ')。)。;


// forループでイテレータを使用して反復します
にとって ((const 自動 [キー、値] countryCapitalMap)。 {{
費用 <<<< ':' <<価値<< 'NS';
}

戻る 0;
}
</にとって>>
出力
中国北京
フランスパリ
インドデリー
ネパールカトマンズ

これで、C ++でマップを反復処理する方法について説明しました。ハッピーコーディング!