C++ で辞書を作成する

胡金庫 2023年10月12日
  1. C++ でイニシャライザリストコンストラクタを使って辞書を作成する
  2. C++ でデフォルトのコンストラクタを使用して辞書を作成する
  3. copy コンストラクタを使って C++ で辞書を作成する
  4. C++ で範囲ベースのコンストラクタを使用して辞書を作成する
C++ で辞書を作成する

この記事では、C++ で辞書を作成する方法を紹介します。

C++ でイニシャライザリストコンストラクタを使って辞書を作成する

C++ 標準コンテナライブラリでは、辞書は std::map と名付けられ、一意のキーを持つソートされたキーと値のペアを実装しています。map の要素に対する検索、削除、挿入などの操作は対数的に複雑です。このメソッドは中括弧を用いて map オブジェクトをリテラル値で初期化します。以下のコード例のように、各要素のペアはカンマで区切られていることに注意してください。

#include <iostream>
#include <map>

using std::cin;
using std::copy;
using std::cout;
using std::endl;
using std::map;
using std::string;

template <typename Map>
void PrintMap(Map& m) {
  cout << "[ ";
  for (auto& item : m) {
    cout << item.first << ":" << item.second << " ";
  }
  cout << "]\n";
}

int main() {
  map<int, string> map1 = {{
                               1,
                               "Apple",
                           },
                           {
                               2,
                               "Banana",
                           },
                           {
                               3,
                               "Mango",
                           },
                           {
                               4,
                               "Raspberry",
                           },
                           {
                               5,
                               "Blackberry",
                           },
                           {
                               6,
                               "Cocoa",
                           }};

  cout << "map1 - ";
  PrintMap(map1);
  cout << endl;

  return EXIT_SUCCESS;
}

出力:

map1 - [ 1:Apple 2:Banana 3:Mango 4:Raspberry 5:Blackberry 6:Cocoa ]

C++ でデフォルトのコンストラクタを使用して辞書を作成する

あるいは、map 型のオブジェクトを与えられたパラメータで宣言し、それぞれのキーと値のペアを別の文で初期化することもできます。このサンプルでは、int のキーと string-s の値を持つマップを示しています。これらの文は常にループの中に入れたり、ユーザの入力から値を取得したりすることができますが、これは実世界のアプリケーションのシナリオに適しています。

#include <iostream>
#include <map>

using std::cin;
using std::copy;
using std::cout;
using std::endl;
using std::map;
using std::string;

template <typename Map>
void PrintMap(Map& m) {
  cout << "[ ";
  for (auto& item : m) {
    cout << item.first << ":" << item.second << " ";
  }
  cout << "]\n";
}

int main() {
  map<int, string> map2;
  map2[1] = "Banana";
  map2[2] = "Mango";
  map2[3] = "Cocoa";
  map2[4] = "Raspberry";

  cout << "map2 - ";
  PrintMap(map2);
  cout << endl;

  return EXIT_SUCCESS;
}

出力:

map2 - [ 1:Banana 2:Mango 3:Cocoa 4:Raspberry ]

copy コンストラクタを使って C++ で辞書を作成する

新しい map オブジェクトを作成する別の方法として、copy コンストラクタを利用する方法があります。このメソッドは既存の map オブジェクトを移動させず、プログラムの実行中に後で再利用できることに注意してください。

#include <iostream>
#include <map>

using std::cin;
using std::copy;
using std::cout;
using std::endl;
using std::map;
using std::string;

template <typename Map>
void PrintMap(Map& m) {
  cout << "[ ";
  for (auto& item : m) {
    cout << item.first << ":" << item.second << " ";
  }
  cout << "]\n";
}

int main() {
  map<int, string> map1 = {{
                               1,
                               "Apple",
                           },
                           {
                               2,
                               "Banana",
                           },
                           {
                               3,
                               "Mango",
                           },
                           {
                               4,
                               "Raspberry",
                           },
                           {
                               5,
                               "Blackberry",
                           },
                           {
                               6,
                               "Cocoa",
                           }};

  map<int, string> map3(map1);

  cout << "map3 - ";
  PrintMap(map3);
  cout << endl;

  return EXIT_SUCCESS;
}

出力:

map3 - [ 1:Apple 2:Banana 3:Mango 4:Raspberry 5:Blackberry 6:Cocoa ]

C++ で範囲ベースのコンストラクタを使用して辞書を作成する

範囲ベースのコンストラクタは、以前のメソッドのもう一つの代替手段です。この方法は、既存の map オブジェクトのサブセットのキーと値のペアで新しい map 変数を初期化するために利用することができます。この例では、範囲内の最初のキーと値のペアを指定するために find メソッドを使用します。その結果、新しい map2 変数には、キー値 2 から map1 オブジェクトの最後の要素までのペアが含まれます。

#include <iostream>
#include <map>

using std::cin;
using std::copy;
using std::cout;
using std::endl;
using std::map;
using std::string;

template <typename Map>
void PrintMap(Map& m) {
  cout << "[ ";
  for (auto& item : m) {
    cout << item.first << ":" << item.second << " ";
  }
  cout << "]\n";
}

int main() {
  map<int, string> map1 = {{
                               1,
                               "Apple",
                           },
                           {
                               2,
                               "Banana",
                           },
                           {
                               3,
                               "Mango",
                           },
                           {
                               4,
                               "Raspberry",
                           },
                           {
                               5,
                               "Blackberry",
                           },
                           {
                               6,
                               "Cocoa",
                           }};

  map<int, string> map4(map1.find(2), map1.end());

  cout << "map4 - ";
  PrintMap(map4);
  cout << endl;

  return EXIT_SUCCESS;
}

出力:

map4 - [ 2:Banana 3:Mango 4:Raspberry 5:Blackberry 6:Cocoa ]
著者: 胡金庫
胡金庫 avatar 胡金庫 avatar

DelftStack.comの創設者です。Jinku はロボティクスと自動車産業で8年以上働いています。自動テスト、リモートサーバーからのデータ収集、耐久テストからのレポート作成が必要となったとき、彼はコーディングスキルを磨きました。彼は電気/電子工学のバックグラウンドを持っていますが、組み込みエレクトロニクス、組み込みプログラミング、フロントエンド/バックエンドプログラミングへの関心を広げています。

LinkedIn Facebook