std::unordered_multiset
| ヘッダ <unordered_set> で定義
|
||
template< class Key, class Hash = std::hash<Key>, class KeyEqual = std::equal_to<Key>, class Allocator = std::allocator<Key> > class unordered_multiset; |
(1) | (C++11以上) |
namespace pmr { template <class Key, class Hash = std::hash<Key>, class Pred = std::equal_to<Key>> using unordered_multiset = std::unordered_multiset<Key, Hash, Pred, std::pmr::polymorphic_allocator<Key>> } |
(2) | (C++17以上) |
unordered multiset は Key 型の一意とは限らないオブジェクトの集合を格納する連想コンテナです。 検索、挿入、削除は平均定数時間の計算量です。
内部的には、要素は特定の順序にソートされず、複数のバケットにまとめられます。 要素がどのバケットに配置されるかはもっぱらその値のハッシュに依存します。 これにより、いったんハッシュが計算されればその要素が配置される正確なバケットを参照できるため、個々の要素への高速なアクセスが可能になります。
このコンテナのイテレーション順序が安定であることは要求されません (そのため、例えば2つの std::unordered_multiset を比較するために std::equal を使うことはできません) が、キーが等しい (key_eq() で比較して等しい) 要素のグループは、イテレーション順序において隣接した範囲を形成します。 この範囲は std::unordered_multiset::equal_range でアクセスできます。
std::unordered_multiset は Container, AllocatorAwareContainer, UnorderedAssociativeContainer の要求を満たします。
メンバ型
| メンバ型 | 定義 |
key_type
|
Key
|
value_type
|
Key
|
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
|
const 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以上) |
コンテナノードを表すノードハンドルの特殊化 |
メンバ関数
unordered_multiset を構築します (パブリックメンバ関数) | |
unordered_multiset を破棄します (パブリックメンバ関数) | |
| コンテナに値を代入します (パブリックメンバ関数) | |
| 関連付けられているアロケータを返します (パブリックメンバ関数) | |
イテレータ | |
| 先頭を指すイテレータを返します (パブリックメンバ関数) | |
| 終端を指すイテレータを返します (パブリックメンバ関数) | |
容量 | |
| コンテナが空かどうか調べます (パブリックメンバ関数) | |
| 要素数を返します (パブリックメンバ関数) | |
| 可能な最大の要素数を返します (パブリックメンバ関数) | |
変更 | |
| すべての要素を削除します (パブリックメンバ関数) | |
| 要素またはノード (C++17以上)を挿入します (パブリックメンバ関数) | |
| 要素をその場で構築します (パブリックメンバ関数) | |
| ヒントを使用して要素をその場で構築します (パブリックメンバ関数) | |
| 要素を削除します (パブリックメンバ関数) | |
(C++11) |
内容を入れ替えます (パブリックメンバ関数) |
(C++17) |
コンテナからノードを抽出します (パブリックメンバ関数) |
(C++17) |
他のコンテナからノードを接合します (パブリックメンバ関数) |
検索 | |
| 指定されたキーと一致する要素の数を返します (パブリックメンバ関数) | |
| 指定されたキーを持つ要素を探します (パブリックメンバ関数) | |
(C++20) |
コンテナが指定されたキーを持つ要素を格納しているかどうか調べます (パブリックメンバ関数) |
| 指定されたキーに一致する要素の範囲を返します (パブリックメンバ関数) | |
バケットインタフェース | |
| 指定されたバケットの先頭を指すイテレータを返します (パブリックメンバ関数) | |
| 指定されたバケットの終端を指すイテレータを返します (パブリックメンバ関数) | |
| バケットの数を返します (パブリックメンバ関数) | |
| バケットの最大数を返します (パブリックメンバ関数) | |
| 特定のバケットの要素数を返します (パブリックメンバ関数) | |
| 指定されたキーのためのバケットを返します (パブリックメンバ関数) | |
ハッシュポリシー | |
| バケットあたりの平均要素数を返します (パブリックメンバ関数) | |
| バケットあたりの平均要素数の最大値を管理します (パブリックメンバ関数) | |
| 少なくとも指定された数のバケットを予約します。 これによりハッシュテーブルが再生成されます。 (パブリックメンバ関数) | |
| 少なくとも指定された数の要素のための空間を予約します。 これによりハッシュテーブルが再生成されます。 (パブリックメンバ関数) | |
観察 | |
| キーをハッシュするために使用される関数を返します (パブリックメンバ関数) | |
| キーが等しいかどうかを比較するために使用される関数を返します (パブリックメンバ関数) | |
非メンバ関数
(C++20で削除) |
unordered_multiset 内の値を比較します (関数テンプレート) |
| std::swap アルゴリズムの特殊化 (関数テンプレート) | |
| 特定の基準を満たすすべての要素を削除します (関数テンプレート) |
推定ガイド(C++17以上)
ノート
メンバ型 iterator および const_iterator は同じ型のエイリアスである場合があります。 これは、これら2つの型を引数として取る一組の関数オーバーロードの定義は単一定義規則に違反するかもしれない、という意味です。 iterator は const_iterator に変換可能であるため、代わりに const_iterator を引数の型として用いた関数がひとつあれば良いでしょう。