std:: unordered_map
|
ヘッダーで定義
<unordered_map>
|
||
|
template
<
class
Key,
|
(1) | (C++11以降) |
|
namespace
pmr
{
template
<
|
(2) | (C++17以降) |
std::unordered_map
は、一意のキーを持つキーと値のペアを含む連想コンテナです。要素の検索、挿入、削除は平均的に定数時間の計算量を持ちます。
内部的には、要素は特定の順序でソートされず、バケットに整理されます。要素がどのバケットに配置されるかは、そのキーのハッシュに完全に依存します。同じハッシュコードを持つキーは同じバケットに現れます。これにより、個々の要素への高速なアクセスが可能になります。なぜなら、ハッシュが計算されると、その要素を含むバケットを参照するためです。
2つのキーは、それらのキーを渡されたときにマップのキー等価述語がtrueを返す場合、 等価 であると見なされます。2つのキーが等価である場合、ハッシュ関数は両方のキーに対して同じ値を返さなければなりません。
std::unordered_map
は
Container
、
AllocatorAwareContainer
、
UnorderedAssociativeContainer
の要件を満たします。
std::unordered_mapのすべてのメンバ関数は
constexpr
です:定数式の評価中に
std::unordered_map
オブジェクトを作成および使用することが可能です。
ただし、
|
(C++26以降) |
目次イテレータの無効化
注記
テンプレートパラメータ
メンバ型
メンバー関数
非メンバー関数
注記
例
このコードを実行
#include <iostream> #include <string> #include <unordered_map> int main() { // 文字列から文字列へのunordered_mapを3要素で作成 std::unordered_map<std::string, std::string> u = { {"RED", "#FF0000"}, {"GREEN", "#00FF00"}, {"BLUE", "#0000FF"} }; // キーと値のペアを出力するヘルパーラムダ関数 auto print_key_value = [](const auto& key, const auto& value) { std::cout << "Key:[" << key << "] Value:[" << value << "]\n"; }; std::cout << "unordered_mapのキーと値のペアを反復処理して出力(型を明示的に指定):\n" "\n"; for (const std::pair<const std::string, std::string>& n : u) print_key_value(n.first, n.second); std::cout << "\nC++17の構造化バインディングを使用してキーと値のペアを反復処理して出力:\n"; for (const auto& [key, value] : u) print_key_value(key, value); // unordered_mapに2つの新しいエントリを追加 u["BLACK"] = "#000000"; u["WHITE"] = "#FFFFFF"; std::cout << "\nキーによる値の出力:\n" "色REDのHEX値は:[" << u["RED"] << "]\n" "色BLACKのHEX値は:[" << u["BLACK"] << "]\n\n"; std::cout << "存在しないキーでoperator[]を使用して新しいキーと値のペアを挿入:\n"; print_key_value("new_key", u["new_key"]); std::cout << "\n`auto`を使用してキーと値のペアを反復処理して出力:\n" "new_keyがマップ内のキーの1つになりました:\n"; for (const auto& n : u) print_key_value(n.first, n.second); } 出力例: Iterate and print key-value pairs of unordered_map, being explicit with their types: Key:[BLUE] Value:[#0000FF] Key:[GREEN] Value:[#00FF00] Key:[RED] Value:[#FF0000] Iterate and print key-value pairs using C++17 structured binding: Key:[BLUE] Value:[#0000FF] Key:[GREEN] Value:[#00FF00] Key:[RED] Value:[#FF0000] Output values by key: The HEX of color RED is:[#FF0000] The HEX of color BLACK is:[#000000] Use operator[] with non-existent key to insert a new key-value pair: Key:[new_key] Value:[] Iterate and print key-value pairs, using `auto`; new_key is now one of the keys in the map: Key:[new_key] Value:[] Key:[WHITE] Value:[#FFFFFF] Key:[BLACK] Value:[#000000] Key:[BLUE] Value:[#0000FF] Key:[GREEN] Value:[#00FF00] Key:[RED] Value:[#FF0000] 不具合報告以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。
関連項目
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||