Namespaces
Variants

std:: multimap

From ja.cppreference.net
ヘッダーで定義 <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のイテレータは、構築時に使用された比較関数によって定義される非降順でキーを反復します。つまり、以下の場合

  • m 、 std::multimap
  • it_l および it_r 、 m へのデリファレンス可能なイテレータで、 it_l < it_r を満たすもの。

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

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

(since C++11)

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

std::multimap は Container 、 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 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 を表すコンテナノード

メンバークラス

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

メンバー関数

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

非メンバー関数

(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) コンテナのためのレンジ構築と挿入
__cpp_lib_constexpr_map 202502L (C++26) constexpr std::multimap

例

不具合報告

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

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

関連項目

キー-値ペアのコレクション、キーでソートされ、キーは一意
(クラステンプレート)
キー-値ペアのコレクション、キーでハッシュ化
(クラステンプレート)
2つのコンテナを適応させてキー-値ペアのコレクションを提供、キーでソート
(クラステンプレート)