std::unordered_map
提供: cppreference.com
<tbody>
</tbody>
| ヘッダ <unordered_map> で定義
|
||
template< class Key, class T, class Hash = std::hash<Key>, class KeyEqual = std::equal_to<Key>, class Allocator = std::allocator< std::pair<const Key, T> > > class unordered_map; |
(1) | (C++11以上) |
namespace pmr { template <class Key, class T, class Hash = std::hash<Key>, class Pred = std::equal_to<Key>> using unordered_map = std::unordered_map<Key, T, Hash, Pred, std::pmr::polymorphic_allocator<std::pair<const Key,T>>>; } |
(2) | (C++17以上) |
unordered map はキーが一意なキー値ペアを格納する連想コンテナです。 要素の検索、挿入、削除は平均定数時間の計算量です。
内部的には、要素は特定の順序にソートされず、複数のバケットにまとめられます。 要素がどのバケットに配置されるかはもっぱらその値のハッシュに依存します。 これにより、いったんハッシュが計算されればその要素が配置される正確なバケットを参照できるため、個々の要素への高速なアクセスが可能になります。
std::unordered_map は Container, AllocatorAwareContainer, UnorderedAssociativeContainer の要件を満たします。
イテレータの無効化
| 操作 | 無効化 |
|---|---|
| すべての読み込み操作および swap, std::swap | 決して無効化されません |
| clear, rehash, reserve, operator= | 常に無効化されます |
| insert, emplace, emplace_hint, operator[] | 再ハッシュが発生した場合のみ無効化されます |
| erase | 削除された要素のみ無効化されます |
ノート
- swap 関数はコンテナ内部のいかなるイテレータも無効化しませんが、 swap 範囲の終端をマークするイテレータは無効化されます。
- コンテナに格納されているキーまたはデータへの参照およびポインタは、対応するイテレータが無効化されたとしても、その要素が削除された場合にしか無効化されません。
メンバ型
| メンバ型 | 定義 |
key_type
|
Key
|
mapped_type
|
T
|
value_type
|
std::pair<const Key, T>
|
size_type
|
符号なし整数型 (通常 std::size_t) |
difference_type
|
符号付き整数型 (通常 std::ptrdiff_t) |
hasher
|
Hash
|
key_equal
|
KeyEqual
|
allocator_type
|
Allocator
|
reference
|
value_type&
|
const_reference
|
const value_type&
|
pointer
|
std::allocator_traits<Allocator>::pointer
|
const_pointer
|
std::allocator_traits<Allocator>::const_pointer
|
iterator
|
LegacyForwardIterator |
const_iterator
|
const LegacyForwardIterator |
local_iterator
|
カテゴリおよび value, difference, pointer, reference の各型が iterator と同じイテレータ型。 このイテレータはバケット内をイテレートするために使用することができますが、別のバケットには移動できません
|
const_local_iterator
|
カテゴリおよび value, difference, pointer, reference の各型が const_iterator と同じイテレータ型。 このイテレータはバケット内をイテレートするために使用することができますが、別のバケットには移動できません
|
node_type(C++17以上) |
コンテナノードを表すノードハンドルの特殊化 |
insert_return_type(C++17以上) |
node_type を挿入した結果を表す型。 テンプレート引数 iterator および node_type でインスタンス化された template <class Iter, class NodeType> struct /*unspecified*/ {
Iter position;
bool inserted;
NodeType node;
};
|
メンバ関数
unordered_map を構築します (パブリックメンバ関数) | |
unordered_map を破棄します (パブリックメンバ関数) | |
| コンテナに値を代入します (パブリックメンバ関数) | |
| 関連付けられているアロケータを返します (パブリックメンバ関数) | |
イテレータ | |
| 先頭を指すイテレータを返します (パブリックメンバ関数) | |
| 終端を指すイテレータを返します (パブリックメンバ関数) | |
容量 | |
| コンテナが空かどうか調べます (パブリックメンバ関数) | |
| 要素数を返します (パブリックメンバ関数) | |
| 可能な最大の要素数を返します (パブリックメンバ関数) | |
変更 | |
| すべての要素を削除します (パブリックメンバ関数) | |
| 要素またはノード (C++17以上)を挿入します (パブリックメンバ関数) | |
(C++17) |
要素を挿入します。 キーがすでに存在している場合は現在の要素に代入します (パブリックメンバ関数) |
| 要素をその場で構築します (パブリックメンバ関数) | |
| ヒントを使用して要素をその場で構築します (パブリックメンバ関数) | |
(C++17) |
キーが存在しなければその場で挿入します。 キーが存在している場合は何もしません (パブリックメンバ関数) |
| 要素を削除します (パブリックメンバ関数) | |
(C++11) |
内容を入れ替えます (パブリックメンバ関数) |
(C++17) |
コンテナからノードを抽出します (パブリックメンバ関数) |
(C++17) |
他のコンテナからノードを接合します (パブリックメンバ関数) |
検索 | |
| 境界チェック付きで指定された要素にアクセスします (パブリックメンバ関数) | |
| 指定された要素にアクセスまたは挿入します (パブリックメンバ関数) | |
| 指定されたキーと一致する要素の数を返します (パブリックメンバ関数) | |
| 指定されたキーを持つ要素を探します (パブリックメンバ関数) | |
(C++20) |
コンテナが指定されたキーを持つ要素を格納しているかどうか調べます (パブリックメンバ関数) |
| 指定されたキーに一致する要素の範囲を返します (パブリックメンバ関数) | |
バケットインタフェース | |
| 指定されたバケットの先頭を指すイテレータを返します (パブリックメンバ関数) | |
| 指定されたバケットの終端を指すイテレータを返します (パブリックメンバ関数) | |
| バケットの数を返します (パブリックメンバ関数) | |
| バケットの最大数を返します (パブリックメンバ関数) | |
| 特定のバケットの要素数を返します (パブリックメンバ関数) | |
| 指定されたキーのためのバケットを返します (パブリックメンバ関数) | |
ハッシュポリシー | |
| バケットあたりの平均要素数を返します (パブリックメンバ関数) | |
| バケットあたりの平均要素数の最大値を管理します (パブリックメンバ関数) | |
| 少なくとも指定された数のバケットを予約します。 これによりハッシュテーブルが再生成されます。 (パブリックメンバ関数) | |
| 少なくとも指定された数の要素のための空間を予約します。 これによりハッシュテーブルが再生成されます。 (パブリックメンバ関数) | |
観察 | |
| キーをハッシュするために使用される関数を返します (パブリックメンバ関数) | |
| キーが等しいかどうかを比較するために使用される関数を返します (パブリックメンバ関数) | |
非メンバ関数
(C++20で削除) |
unordered_map 内の値を比較します (関数テンプレート) |
| std::swap アルゴリズムの特殊化 (関数テンプレート) | |
(C++20) |
特定の基準を満たすすべての要素を削除します (関数テンプレート) |
推定ガイド(C++17以上)
例
Run this code
#include <iostream>
#include <string>
#include <unordered_map>
int main()
{
// Create an unordered_map of three strings (that map to strings)
std::unordered_map<std::string, std::string> u = {
{"RED","#FF0000"},
{"GREEN","#00FF00"},
{"BLUE","#0000FF"}
};
// Iterate and print keys and values of unordered_map
for( const auto& n : u ) {
std::cout << "Key:[" << n.first << "] Value:[" << n.second << "]\n";
}
// Add two new entries to the unordered_map
u["BLACK"] = "#000000";
u["WHITE"] = "#FFFFFF";
// Output values by key
std::cout << "The HEX of color RED is:[" << u["RED"] << "]\n";
std::cout << "The HEX of color BLACK is:[" << u["BLACK"] << "]\n";
return 0;
}
出力:
Key:[RED] Value:[#FF0000]
Key:[BLUE] Value:[#0000FF]
Key:[GREEN] Value:[#00FF00]
The HEX of color RED is:[#FF0000]
The HEX of color BLACK is:[#000000]