ホームページ > バックエンド開発 > C++ > C でネストされたマップを効率的に反復するにはどうすればよいですか?

C でネストされたマップを効率的に反復するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-12-03 02:08:10
オリジナル
340 人が閲覧しました

How to Efficiently Iterate Through Nested Maps in C  ?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート