名前空間
変種
操作

std::multimap

From cppreference.com
< cpp‎ | container
 
 
 
 
ヘッダ <map> で定義
template<

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

> class multimap;
(1)
namespace pmr {

    template<
        class Key,
        class T,
        class Compare = std::less<Key>
    > using multimap = std::multimap<Key, T, Compare,
        std::pmr::polymorphic_allocator<std::pair<const Key, T>>>;

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

std::multimap は、キーと値のペアのソート済みリストを格納する連想コンテナであり、同一キーを持つ複数のエントリを許容します。ソートは、キーに適用される比較関数 Compare に従って行われます。検索、挿入、および削除操作は対数時間計算量です。

std::multimap のイテレータは、キーの非降順で走査します。ここで非降順とは、コンテナ構築時に使用された比較関数によって定義されます。つまり、以下が与えられたとします。

  • mstd::multimap
  • it_lit_rm への間接参照可能なイテレータで、it_l < it_r を満たすもの。

m.value_comp()(*it_r, *it_l) == false (デフォルトの比較を使用する場合、最小から最大へ)。

キーが等価であると見なされるキーと値のペアの順序は、挿入された順序であり、変更されません。

(C++11以降)

標準ライブラリがCompare要件を使用する場所では常に、等価性はCompareで説明されている等価関係を使用して決定されます。 不正確な言い方をすれば、2つのオブジェクトabは、どちらも他方より小さいと見なされない場合に等価であると見なされます:!comp(a, b) && !comp(b, a)

std::multimapContainer, AllocatorAwareContainer, AssociativeContainer および ReversibleContainer の要件を満たします。

std::multimap の全てのメンバ関数は constexpr です。つまり、定数式の評価中に std::multimap オブジェクトを作成して使用することが可能です。

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

(C++26以降)

目次

[編集] テンプレートパラメータ

[編集] メンバ型

定義
key_type Key[編集]
mapped_type T[編集]
value_type std::pair<const Key, T>[編集]
size_type 符号なし整数型 (通常は std::size_t)[編集]
difference_type 符号付き整数型 (通常は std::ptrdiff_t)[編集]
key_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以降) コンテナのノードを表す ノードハンドル の特殊化[編集]

[編集] メンバクラス

value_type 型のオブジェクトを比較する
(クラス) [編集]

[編集] メンバ関数

multimap を構築する
(公開メンバ関数) [編集]
multimap を破棄する
(公開メンバ関数) [編集]
コンテナに値を代入する
(公開メンバ関数) [編集]
関連付けられたアロケータを返す
(公開メンバ関数) [編集]
イテレータ
先頭へのイテレータを返す
(public メンバ関数) [編集]
(C++11)
末尾へのイテレータを返す
(public メンバ関数) [編集]
先頭への逆イテレータを返す
(public メンバ関数) [編集]
(C++11)
末尾への逆イテレータを返す
(public メンバ関数) [編集]
容量
コンテナが空かどうかをチェックする
(public メンバ関数) [編集]
要素数を返す
(public メンバ関数) [編集]
可能な最大要素数を返す
(public メンバ関数) [編集]
変更
内容をクリアする
(公開メンバ関数) [編集]
要素 またはノード(C++17以降)を挿入する
(公開メンバ関数) [編集]
要素の範囲を挿入する
(公開メンバ関数) [編集]
(C++11)
要素を直接構築する
(公開メンバ関数) [編集]
ヒントを使用して要素を直接構築する
(公開メンバ関数) [編集]
要素を削除する
(公開メンバ関数) [編集]
内容を交換する
(public メンバ関数) [編集]
(C++17)
コンテナからノードを抽出する
(公開メンバ関数) [編集]
(C++17)
他のコンテナからノードを連結する
(公開メンバ関数) [編集]
検索
特定のキーに一致する要素の数を返す
(公開メンバ関数) [編集]
特定のキーを持つ要素を検索する
(公開メンバ関数) [編集]
(C++20)
コンテナが特定のキーを持つ要素を含むか確認する
(公開メンバ関数) [編集]
特定のキーに一致する要素の範囲を返す
(公開メンバ関数) [編集]
指定されたキーより小さくない最初の要素へのイテレータを返す
(公開メンバ関数) [編集]
指定されたキーより大きい最初の要素へのイテレータを返す
(公開メンバ関数) [編集]
監視
キーを比較する関数を返す
(公開メンバ関数) [編集]
value_type 型のオブジェクト内のキーを比較する関数を返す
(公開メンバ関数) [編集]

[編集] 非メンバ関数

(C++20で削除)(C++20で削除)(C++20で削除)(C++20で削除)(C++20で削除)(C++20)
2つの multimap の値を辞書式比較する
(関数テンプレート) [編集]
std::swap アルゴリズムを特殊化する
(関数テンプレート) [編集]
特定の基準を満たすすべての要素を削除する
(関数テンプレート) [編集]

推論補助

(C++17以降)

[編集] 注意

機能テストマクロ 規格 機能
__cpp_lib_containers_ranges 202202L (C++23) コンテナのRangeコンストラクタとRange挿入
__cpp_lib_constexpr_containers 202502L (C++26) constexpr std::multimap

[編集]

[編集] 欠陥報告

以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。

DR 適用対象 公開された動作 正しい動作
LWG 230 C++98 KeyCopyConstructible であることを要求されていなかった
(Key 型のキーが構築できない可能性があった)
Key には次のことも要求される
CopyConstructible であること

[編集] 関連項目

キーでソートされたキーと値のペアのコレクション、キーは一意
(クラステンプレート) [編集]
キーでハッシュ化されたキーと値のペアのコレクション
(クラステンプレート) [編集]
2つのコンテナを適応させて、キーでソートされたキーと値のペアのコレクションを提供する
(クラステンプレート) [編集]
English 日本語 中文(简体) 中文(繁體)