名前空間
変種
操作

std::flat_map

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

    class Key,
    class T,
    class Compare = std::less<Key>,
    class KeyContainer = std::vector<Key>,
    class MappedContainer = std::vector<T>

> class flat_map;
(C++23から)

flat mapは、一意なキーを持つキーと値のペアを格納する連想コンテナの機能を提供するコンテナアダプタです。キーは比較関数`Compare`を使用してソートされます。

クラステンプレート`flat_map`は、それぞれ`KeyContainer`型と`MappedContainer`型のオブジェクトとして渡される2つの基底コンテナのラッパーとして機能します。最初のコンテナはソートされ、各キーに対応する値は同じインデックス(オフセット)の2番目のコンテナに格納されます。両方のコンテナの要素数は同じです。

標準ライブラリがCompare要件を使用するすべての箇所で、一意性は同値関係を使用して決定されます。非公式には、2つのオブジェクトabは、どちらも他方より小さいとみなされない場合、つまり!comp(a, b) && !comp(b, a)の場合に同等であるとみなされます。

std::flat_mapは、ContainerReversibleContainerオプションのコンテナ要件、およびAssociativeContainerのすべての要件(対数探索複雑度を含む)を満たしますが、以下の点を除きます。

  • ノードに関連する要件は適用されません。
  • イテレータの無効化要件が異なります。
  • 挿入および削除操作の複雑度は線形です。

flat mapは、一意なキーを使用するほとんどのAssociativeContainerの操作をサポートしています。

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

ただし、`std::flat_map`オブジェクトは通常constexprにはできません。なぜなら、動的に割り当てられたストレージは同じ定数式評価で解放される必要があるからです。

(C++26以降)

目次

[編集] イテレータの無効化

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

Key - キーの型。`Key`が`KeyContainer::value_type`と同じ型でない場合、プログラムは不正です。
T - マップされた値の型。`T`が`MappedContainer::value_type`と同じ型でない場合、プログラムは不正です。
Compare - 厳密な弱順序を提供するCompare型。
KeyContainer
MappedContainer
- キーとマップされた値をそれぞれ格納するための基底のSequenceContainerの型。これらのコンテナのイテレータはLegacyRandomAccessIteratorを満たすか、random_access_iteratorをモデル化する必要があります。それらのメンバー関数`size`と`max_size`の呼び出しは、例外によって終了してはなりません。

標準コンテナのstd::vectorstd::dequeはこれらの要件を満たします。

[編集] メンバー型

定義
key_container_type KeyContainer[編集]
mapped_container_type MappedContainer[編集]
key_type Key[編集]
mapped_type T[編集]
value_type std::pair<key_type, mapped_type>[編集]
key_compare Compare[編集]
reference std::pair<const key_type&, mapped_type&>[編集]
const_reference std::pair<const key_type&, const mapped_type&>[編集]
size_type std::size_t[編集]
difference_type std::ptrdiff_t[編集]
iterator 実装定義のLegacyInputIterator, ConstexprIterator(C++26以降)および`value_type`へのrandom_access_iterator[編集]
const_iterator 実装定義のLegacyInputIterator, ConstexprIterator(C++26以降)およびconst value_typeへのrandom_access_iterator[編集]
reverse_iterator std::reverse_iterator<iterator>[編集]
const_reverse_iterator std::reverse_iterator<const_iterator>[編集]
コンテナ 基底コンテナを記述する型

struct containers
{
    key_container_type keys;
    mapped_container_type values;
};
[編集]

[編集] メンバークラス

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

[編集] メンバーオブジェクト

メンバ 説明
containers c (private) 適合されたコンテナ
(説明用のメンバオブジェクト*)
key_compare compare (private) 比較関数オブジェクト
(説明用のメンバオブジェクト*)

[編集] メンバー関数

flat_mapを構築する
(公開メンバ関数) [編集]
(デストラクタ)
(暗黙的に宣言)
コンテナアダプタのすべての要素を破棄する
(public member function)
コンテナアダプタに値を割り当てる
(公開メンバ関数) [編集]
要素アクセス
境界チェック付きで指定された要素にアクセスする
(public メンバ関数) [編集]
指定された要素にアクセスまたは挿入する
(public メンバ関数) [編集]
イテレータ
先頭へのイテレータを返す
(public メンバ関数) [編集]
末尾へのイテレータを返す
(public メンバ関数) [編集]
先頭への逆イテレータを返す
(public メンバ関数) [編集]
末尾への逆イテレータを返す
(public メンバ関数) [編集]
容量
コンテナアダプタが空かどうかをチェックする
(public メンバ関数) [編集]
要素数を返す
(public メンバ関数) [編集]
可能な最大要素数を返す
(public メンバ関数) [編集]
変更
要素を直接構築する
(公開メンバ関数) [編集]
ヒントを使用して要素を直接構築する
(公開メンバ関数) [編集]
キーが存在しない場合はインプレースで挿入し、キーが存在する場合は何もしない
(public member function) [編集]
要素を挿入する
(公開メンバ関数) [編集]
要素の範囲を挿入する
(公開メンバ関数) [編集]
要素を挿入するか、キーが既に存在する場合は現在の要素に代入する
(public member function) [編集]
基底コンテナを抽出する
(公開メンバ関数) [編集]
基底コンテナを置き換える
(public member function) [編集]
要素を削除する
(公開メンバ関数) [編集]
内容を交換する
(public メンバ関数) [編集]
内容をクリアする
(公開メンバ関数) [編集]
検索
特定のキーを持つ要素を検索する
(公開メンバ関数) [編集]
特定のキーに一致する要素の数を返す
(公開メンバ関数) [編集]
コンテナが特定のキーを持つ要素を含むか確認する
(公開メンバ関数) [編集]
指定されたキーより小さくない最初の要素へのイテレータを返す
(公開メンバ関数) [編集]
指定されたキーより大きい最初の要素へのイテレータを返す
(公開メンバ関数) [編集]
特定のキーに一致する要素の範囲を返す
(公開メンバ関数) [編集]
監視
キーを比較する関数を返す
(公開メンバ関数) [編集]
value_type 型のオブジェクト内のキーを比較する関数を返す
(公開メンバ関数) [編集]
基底キーコンテナへの直接アクセス
(public member function) [編集]
基底値コンテナへの直接アクセス
(public member function) [編集]

[編集] 非メンバー関数

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

[編集] ヘルパークラス

std::uses_allocator 型特性を特殊化する
(クラス テンプレート特殊化) [edit]

[編集] タグ

範囲の要素がソートされ、一意であることを示す
(タグ)[edit]

[編集] 推論ガイド

[編集] 注釈

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


機能テストマクロ 規格 機能
__cpp_lib_flat_map 202207L (C++23) std::flat_mapおよびstd::flat_multimap
__cpp_lib_constexpr_containers 202502L (C++26) constexpr std::flat_map

[編集]

[編集] 関連項目

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