C でのネストされたマップの反復
C でネストされたマップがあるシナリオを考えてみましょう。具体的には、マップは std::map<:string std::map std::string>> です。このマップ構造には次のようなデータが保持されます。
m["name1"]["value1"] = "data1"; m["name1"]["value2"] = "data2"; m["name2"]["value1"] = "data1"; m["name2"]["value2"] = "data2"; m["name3"]["value1"] = "data1"; m["name3"]["value2"] = "data2";
このネストされたマップを効果的に反復処理してさまざまな値にアクセスするには、次のテクニックを利用できます。
C 11 Ranged の使用for ループ:
C 11 では、範囲ベースの for ループを使用して、反復プロセスを簡素化します。このアプローチにより、不要なコピーが回避され、簡潔な構文が提供されます。
std::map<std::string, std::map<std::string, std::string>> mymap; for (auto const &ent1 : mymap) { // ent1.first is the first key for (auto const &ent2 : ent1.second) { // ent2.first is the second key // ent2.second is the data } }
参照変数の明示的な定義の使用:
または、参照変数を明示的に定義することで読みやすさを向上できます。キーと値については。このアプローチではより多くのコードが生成されますが、わかりやすくするために変数を明示的に定義します。
for (auto const &ent1 : mymap) { auto const &outer_key = ent1.first; auto const &inner_map = ent1.second; for (auto const &ent2 : inner_map) { auto const &inner_key = ent2.first; auto const &inner_value = ent2.second; } }
C 17 での構造化バインディングの使用:
C 17 では、構造化バインディングは以下を提供します。ネストされたものを反復処理するさらに単純化された簡潔な方法マップ。
for (auto const &[outer_key, inner_map] : mymap) { for (auto const &[inner_key, inner_value] : inner_map) { // Access outer_key, inner_key and inner_value directly } }
以上がC でネストされたマップを効率的に反復するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。