C++ 標準ライブラリ<unordered_map>
C++ において、<unordered_map>は標準テンプレートライブラリ(STL)の一部であり、ハッシュテーブルに基づくキーと値のペアのコンテナを提供します。
とstd::mapとは異なり、unordered_map要素の順序を保証しませんが、通常はより高速な検索速度を提供します。
unordered_mapは連想コンテナであり、キーと値のペア(key-value pairs)を格納します。各キー(key)は一意です。unordered_mapハッシュテーブルを使用して要素を格納するため、検索、挿入、削除の操作において平均定数時間計算量を持ちます。
構文
以下はunordered_mapの基本構文です:
#include <unordered_map> std::unordered_map<key_type, value_type> map_name;
key_typeはキーの型です。value_typeは値の型です。
コンストラクタ
unordered_map複数の方法で構築できます:
// 默认构造
std::unordered_map<int, std::string> myMap;
// 构造并初始化
std::unordered_map<int, std::string> myMap = {{1, "one"}, {2, "two"}};
// 构造并指定初始容量
std::unordered_map<int, std::string> myMap(10);
// 构造并复制另一个 unordered_map
std::unordered_map<int, std::string> anotherMap = myMap;
基本操作
要素の挿入:
myMap.insert({3, "three"});
要素へのアクセス:
std::string value = myMap[1]; // 获取键为1的值
要素の削除:
myMap.erase(1); // 删除键为1的元素
要素の検索:
auto it = myMap.find(2); // 查找键为2的元素
if (it != myMap.end()) {
std::cout << "Found: " << it->second << std::endl;
}
例
以下は、...を使用したunordered_map簡単な例です。出力結果を含みます。
例
#include <iostream>
#include <unordered_map>
int main() {
// unordered_map を作成します。キーは int、値は string
std::unordered_map<int, std::string> myMap;
// キーと値のペアをいくつか挿入
myMap[1] = "one";
myMap[2] = "two";
myMap[3] = "three";
// すべての要素を出力
for (const auto& pair : myMap) {
std::cout << "Key: " << pair.first << ", Value: " << pair.second << std::endl;
}
// 特定のキーの値にアクセス
std::cout << "Value for key 2: " << myMap[2] << std::endl;
// キーが1の要素を削除
myMap.erase(1);
// 再度すべての要素を出力
std::cout << "After erasing key 1:" << std::endl;
for (const auto& pair : myMap) {
std::cout << "Key: " << pair.first << ", Value: " << pair.second << std::endl;
}
return 0;
}
#include <unordered_map>
int main() {
// unordered_map を作成します。キーは int、値は string
std::unordered_map<int, std::string> myMap;
// キーと値のペアをいくつか挿入
myMap[1] = "one";
myMap[2] = "two";
myMap[3] = "three";
// すべての要素を出力
for (const auto& pair : myMap) {
std::cout << "Key: " << pair.first << ", Value: " << pair.second << std::endl;
}
// 特定のキーの値にアクセス
std::cout << "Value for key 2: " << myMap[2] << std::endl;
// キーが1の要素を削除
myMap.erase(1);
// 再度すべての要素を出力
std::cout << "After erasing key 1:" << std::endl;
for (const auto& pair : myMap) {
std::cout << "Key: " << pair.first << ", Value: " << pair.second << std::endl;
}
return 0;
}
出力結果:
Key: 1, Value: one Key: 2, Value: two Key: 3, Value: three Value for key 2: two After erasing key 1: Key: 2, Value: two Key: 3, Value: three
注意事項
unordered_map要素の順序は保証されないため、要素の反復順序は実行ごとに異なる場合があります。- ハッシュテーブルのパフォーマンスは、過剰なハッシュ衝突を避けるために、優れたハッシュ関数に依存します。
- と
std::map比較すると、unordered_map要素の数が少ない場合、より多くのメモリを占有する可能性があります。