C++ で STLUnordered MapContainer を使用する
- 
          
            C++ で std::unordered_map要素を使用して順序付けされていないマップコンテナを宣言する
- 
          
            containsメンバー関数を使用して、指定された要素が C++ のマップに存在するかどうかを確認する
- 
          
            eraseメンバー関数を使用して、C++ のマップから特定の要素を削除する
- 
          
            C++ で insertメンバー関数を使用してマップに新しい要素を追加する
 
この記事では、C++ で STL unordered_map コンテナを使用する方法のいくつかの方法について説明します。
C++ で std::unordered_map 要素を使用して順序付けされていないマップコンテナを宣言する
    
std::unordered_map 要素は、各キーが一意であるキーと値のペアの連想コンテナを実装します。std::map とは対照的に、std::unordered_map コンテナは要素をソートされた順序で格納しません。したがって、コンテナは主に要素のルックアップに使用され、位置は重要ではありません。さらに、オブジェクトの存続期間中の要素の位置は、固定されることが保証されていません。したがって、プログラマーは順序を未定義として扱う必要があります。
次の例は、unordered_map コンテナのリストの初期化を示してから、両方のマップの内容を出力します。m1 要素の降順は、それらがソートされていることを意味するものではないことに注意してください。
#include <iostream>
#include <map>
#include <unordered_map>
using std::cout;
using std::endl;
using std::string;
template <typename Map>
void printMap(Map& m) {
  for (auto& p : m) cout << p.first << " : " << p.second << ";" << endl;
  cout << endl;
}
int main() {
  std::unordered_map<int, string> m1 = {
      {1, "apple"},
      {2, "banana"},
      {3, "grape"},
      {4, "orange"},
  };
  std::map<int, string> m2 = {
      {1, "apple"},
      {2, "banana"},
      {3, "grape"},
      {4, "orange"},
  };
  printMap(m1);
  printMap(m2);
  return EXIT_SUCCESS;
}
出力:
4 : orange;
3 : grape;
2 : banana;
1 : apple;
1 : apple;
2 : banana;
3 : grape;
4 : orange;
contains メンバー関数を使用して、指定された要素が C++ のマップに存在するかどうかを確認する
contains メンバー関数は、C++ 20 の更新以降、std::unordered_map コンテナーの一部になっています。この関数を使用して、指定された要素がマップに存在するかどうかを確認できます。このコマンドは、キー値を唯一の引数として受け入れ、キーが見つかった場合は true を返します。この関数の平均実行時間は一定であり、最悪の場合はコンテナー自体のサイズに応じて線形になります。
#include <iostream>
#include <map>
#include <unordered_map>
using std::cout;
using std::endl;
using std::string;
template <typename Map>
void printMap(Map& m) {
  for (auto& p : m) cout << p.first << " : " << p.second << ";" << endl;
  cout << endl;
}
int main() {
  std::unordered_map<int, string> m1 = {
      {1, "apple"},
      {2, "banana"},
      {3, "grape"},
      {4, "orange"},
  };
  for (int x : {1, 2, 3, 4, 5}) {
    if (m1.contains(x)) {
      cout << x << ": Found\n";
    } else {
      cout << x << ": Not found\n";
    }
  }
  return EXIT_SUCCESS;
}
出力:
1: Found
2: Found
3: Found
4: Found
5: Not found
erase メンバー関数を使用して、C++ のマップから特定の要素を削除する
erase メンバー関数を利用して、指定されたキーと値のペアをマップから削除できます。この関数には 3つのオーバーロードがあり、最初のオーバーロードはイテレーターを map 要素に移動します。これは、コンテナーから削除する必要があります。2 番目の関数のオーバーロードは、マップから削除される範囲を指定するために 2つのイテレーターを必要とします。指定された範囲は、呼び出し元のコンテナオブジェクト内で有効な範囲である必要があることに注意してください。3 番目のオーバーロードは、削除する必要のある要素のキー値を取ることができます。
次の例では、キー値として偶数を持つ各要素を削除します。
#include <iostream>
#include <map>
#include <unordered_map>
using std::cout;
using std::endl;
using std::string;
template <typename Map>
void printMap(Map& m) {
  for (auto& p : m) cout << p.first << " : " << p.second << ";" << endl;
  cout << endl;
}
int main() {
  std::unordered_map<int, string> m1 = {
      {1, "apple"},
      {2, "banana"},
      {3, "grape"},
      {4, "orange"},
  };
  for (auto it = m1.begin(); it != m1.end();) {
    if (it->first % 2 == 0)
      it = m1.erase(it);
    else
      ++it;
  }
  printMap(m1);
  return EXIT_SUCCESS;
}
出力:
3 : grape;
1 : apple;
C++ で insert メンバー関数を使用してマップに新しい要素を追加する
unordered_map コンテナのもう 1つのコアメンバー関数は、insert 関数です。これを使用して、マップに新しい要素を追加できます。関数には複数のオーバーロードがありますが、キーと値のペアをとる最初のオーバーロードを利用します。また、std::make_pair 関数を使用して、指定された引数値で新しいペアを作成することに注意してください。
#include <iostream>
#include <map>
#include <unordered_map>
#include <vector>
using std::cout;
using std::endl;
using std::string;
using std::vector;
template <typename Map>
void printMap(Map& m) {
  for (auto& p : m) cout << p.first << " : " << p.second << ";" << endl;
  cout << endl;
}
int main() {
  std::unordered_map<int, string> m1 = {
      {1, "apple"},
      {2, "banana"},
      {3, "grape"},
      {4, "orange"},
  };
  vector<string> vec{"papaya", "olive", "melon"};
  auto count = 0;
  for (const auto& item : vec) {
    m1.insert(std::make_pair(count, item));
  }
  printMap(m1);
  return EXIT_SUCCESS;
}
出力:
0 : papaya;
4 : orange;
3 : grape;
2 : banana;
1 : apple;
