Namespaces
Variants

std:: multiset

From 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 value_type への定数 LegacyBidirectionalIterator かつ ConstexprIterator (C++26以降)
const_iterator const value_type への LegacyBidirectionalIterator かつ ConstexprIterator (C++26以降)
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 であることが要求される

関連項目

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