Namespaces
Variants

std:: multiset

From ja.cppreference.net
ヘッダーで定義 <set>
template <

class Key,
class Compare = std:: less < Key > ,
class Allocator = std:: allocator < Key >

> class multiset ;
(1)
namespace pmr {

template <
class Key,
class Compare = std:: less < Key >
> using multiset = std :: multiset < Key, Compare, std:: pmr :: polymorphic_allocator < Key >> ;

}
(2) (C++17以降)

std::multiset は、Key型のオブジェクトのソートされた集合を格納する連想コンテナです。setとは異なり、等価な値を持つ複数のキーが許容されます。ソートはキー比較関数Compareを用いて行われます。検索、挿入、削除操作は対数時間の計算量を持ちます。

標準ライブラリが Compare 要件を使用するすべての箇所では、等価性は Compare で説明されている等価関係を使用して決定されます。大まかに言えば、二つのオブジェクト a と b は、互いが他方より小さいと比較されない場合に等価と見なされます: ! comp ( a, b ) && ! comp ( b, a ) 。

同等と比較される要素の順序は挿入順であり、変更されません。

(since C++11)

std::multiset は Container 、 AllocatorAwareContainer 、 AssociativeContainer および ReversibleContainer の要件を満たします。

std::multisetのすべてのメンバー関数は std::multiset です:定数式の評価において std::multiset オブジェクトを作成および使用することが可能です。

ただし、 std::multiset オブジェクトは一般的に constexpr にはできません。なぜなら、動的に確保されたストレージは同じ定数式の評価内で解放されなければならないためです。

(C++26以降)

目次

テンプレートパラメータ

メンバ型

型 定義
key_type Key
value_type Key
size_type 符号なし整数型 (通常は std::size_t)
difference_type 符号付き整数型 (通常は std::ptrdiff_t)
key_compare Compare
value_compare Compare
allocator_type Allocator
reference value_type&
const_reference const value_type&
pointer

Allocator::pointer

(C++11まで)

std::allocator_traits<Allocator>::pointer

(C++11以降)
const_pointer

Allocator::const_pointer

(C++11まで)

std::allocator_traits<Allocator>::const_pointer

(C++11以降)
iterator 定数 LegacyBidirectionalIterator および ConstexprIterator(C++26以降) から value_type
const_iterator LegacyBidirectionalIterator および ConstexprIterator(C++26以降) から const value_type
reverse_iterator std::reverse_iterator<iterator>
const_reverse_iterator std::reverse_iterator<const_iterator>
node_type (C++17以降) コンテナノードを表す node handle の特殊化

メンバー関数

multisetを構築する
(公開メンバ関数)
multisetを破棄する
(公開メンバ関数)
コンテナに値を代入する
(公開メンバ関数)
関連付けられたアロケータを返す
(public member function)
イテレータ
先頭を指すイテレータを返す
(公開メンバ関数)
(C++11)
終端へのイテレータを返す
(公開メンバ関数)
先頭を指す逆方向イテレータを返す
(公開メンバ関数)
(C++11)
末尾を指す逆方向イテレータを返す
(公開メンバ関数)
容量
コンテナが空かどうかをチェックします
(公開メンバー関数)
要素数を返す
(public member function)
要素の最大可能数を返す
(public member function)
修飾子
内容をクリアする
(public member function)
要素を挿入する またはノード (C++17以降)
(公開メンバ関数)
要素の範囲を挿入する
(公開メンバ関数)
(C++11)
要素をその場で構築する
(公開メンバ関数)
ヒントを使用して要素をその場で構築する
(公開メンバ関数)
要素を削除する
(公開メンバ関数)
内容を交換する
(公開メンバ関数)
(C++17)
コンテナからノードを抽出する
(公開メンバ関数)
(C++17)
別のコンテナからノードをスプライスする
(公開メンバ関数)
ルックアップ
指定されたキーに一致する要素の数を返す
(public member function)
特定のキーを持つ要素を検索
(public member function)
(C++20)
指定されたキーを持つ要素がコンテナに含まれているかどうかをチェックします
(公開メンバ関数)
特定のキーに一致する要素の範囲を返す
(公開メンバ関数)
指定されたキーより 小さくない 最初の要素へのイテレータを返す
(公開メンバ関数)
指定されたキーより 大きい 最初の要素へのイテレータを返す
(public member function)
オブザーバー
キーを比較する関数を返す
(公開メンバ関数)
value_type型のオブジェクト内でキーを比較する関数を返します
(public member function)

非メンバー関数

(C++20で削除) (C++20で削除) (C++20で削除) (C++20で削除) (C++20で削除) (C++20)
2つの multiset の値を辞書順で比較する
(関数テンプレート)
std::swap アルゴリズムを特殊化する
(関数テンプレート)
特定の条件を満たすすべての要素を削除する
(関数テンプレート)

推論ガイド

(C++17以降)

注記

メンバ型 iterator と const_iterator は同じ型のエイリアスである可能性があります。これは、これら2つの型をパラメータ型として使用する関数オーバーロードのペアを定義すると、 One Definition Rule に違反する可能性があることを意味します。 iterator は const_iterator に変換可能であるため、代わりに const_iterator をパラメータ型とする単一の関数が機能します。

機能テスト マクロ 値 規格 機能
__cpp_lib_containers_ranges 202202L (C++23) コンテナの範囲構築と挿入
__cpp_lib_constexpr_set 202502L (C++26) constexpr std::multiset

例

不具合報告

以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。

DR 適用対象 公開時の動作 正しい動作
LWG 103 C++98 イテレータがキーの変更を許可していた イテレータを定数に変更
LWG 230 C++98 Key が CopyConstructible であることが要求されていなかった
( Key 型のキーが構築できない可能性があった)
Key も
CopyConstructible であることが要求される

関連項目

一意のキーのコレクション、キーでソート
(クラステンプレート)
キーのコレクション、キーでハッシュ化
(クラステンプレート)
コンテナをアダプトしてキーのコレクションを提供、キーでソート
(クラステンプレート)