次の方法で共有


map クラス

データ値と並べ替えキーのペアになっている要素が含まれているコレクションに対して、データの格納と取得を実行するために使用します。 キーの値は一意で、データを自動的に並べ替えるために使用されます。

map 内の要素の値は直接変更できます。 キー値は一定の値であり、変更できません。 ただし、要素の値を変更した場合、変更前の要素に関連付けられていたキー値を削除し、変更後の新しい要素に対して新しいキー値を挿入する必要があります。

template <
   class Key, 
   class Type, 
   class Traits = less<Key>, 
   class Allocator=allocator<pair <const Key, Type> > 
> class map;

パラメーター

  • Key
    map に格納されるキーのデータ型。

  • Type
    map に格納される要素のデータ型。

  • Traits
    2 つの要素の値を並べ替えキーとして比較して、map 内の要素の相対順序を決定できる関数オブジェクトを提供する型。 この引数は省略可能であり、既定値は二項述語 less<Key> です。

  • Allocator
    メモリの map の割り当てと解放に関する詳細をカプセル化する、格納されたアロケーター オブジェクトを表す型。 この引数は省略可能であり、既定値は allocator<pair <constKey*,* Type> > です。

解説

標準テンプレート ライブラリ (STL) のマップの map クラスの特徴を次に示します。

  • 関連付けられたキー値に基づいて要素の値を効率的に取得する可変サイズのコンテナーです。

  • 反転することができます。これは、要素にアクセスするための双方向反復子が用意されているためです。

  • 並べ替えが実行されます。これは、指定した比較関数に従いキー値によって要素に順序が設定されるためです。

  • 一意のクラスです。これは、各要素が一意のキーを持つ必要があるためです。

  • ペアを保持する連想コンテナーです。これは、要素のデータ値とキー値が分かれているためです。

  • テンプレート クラスとして機能します。これは、このクラスに用意されている機能が汎用的な機能であり、要素やキーの型に依存しないためです。 要素やキーに使用されているデータ型は、クラス テンプレートで比較関数やアロケーターと共にパラメーターとして指定されます。

map クラスに用意されている反復子は双方向反復子ですが、クラス メンバー関数 insertmap には、弱い入力反復子をテンプレート パラメーターとして取得するバージョンがあります。この反復子の機能に関する要件は、双方向反復子のクラスで保証されている要件よりも低くなっています。 これらの反復子の機能に差異があるのは、反復子の概念が異なっているためです。 反復子の各概念には、反復子独自の一連の要件が含まれています。また、それらの要件を使用するアルゴリズムは、反復子の要件による影響を受けます。 たとえば、一部のオブジェクトを参照するために入力反復子が逆参照される場合があり、また、シーケンス内にある次の反復子に対して逆参照が増加する場合もあります。

コンテナーの種類を選択するときは、アプリケーションで必要となる検索や挿入の種類に基づいてい選択することをお勧めします。 連想コンテナーは、検索、挿入、削除の各操作用に最適化されています。 これらの操作を明示的にサポートするメンバー関数は、最悪のシナリオ (コンテナー内にある要素の数の対数に比例して処理時間が増加する) の場合でも、これらの操作を実行します。 要素を挿入しても反復子の有効性は失われません。また、要素を削除した場合は、削除された要素を具体的に指す反復子だけが無効化されます。

値とキーを関連付ける条件をアプリケーションが満たしている場合、map が最適な連想コンテナーとして機能するように指定してください。 この種類の構造体のモデルとなるのは、一意に発生するキーワードおよび関連する文字列値 (キーワードの定義を指定) が順番に格納されたリストです。 ただし、キーワードには正しい定義が複数あり、そのためにキーが一意ではなくなる場合は、multimap が適切なコンテナーとなります。 また、キーワードのリストだけが格納される場合は、set が適切なコンテナーとなります。 キーワードを複数設定できる場合は、multiset が適切なコンテナーとなります。

map では、key_compare 型の格納されている関数オブジェクトを呼び出すことによって、map が制御する要素を並べ替えます。 格納されているこのオブジェクトは比較関数であり、key_comp メソッドを呼び出すことによってアクセスできます。 通常、指定された 2 つの要素を比較することで、どちらの要素がより小さいか、またはそれらの要素は等しいかどうかを判断します。 すべての要素を比較すると、等価でない要素の順序付けられたシーケンスが作成されます。

注意

比較関数は、数学上の標準的な意味で厳密弱順序を発生させる二項述語です。二項述語 f(x,y) は、2 つの引数オブジェクト (x および y) と戻り値 (true または false) を持つ関数オブジェクトです。set に適用される順序付けは、二項述語が非再帰、反対称、推移的であり、等価性が推移的である (2 つのオブジェクト x と y が、f(x,y) と f(y,x) の両方が false の場合に等価になるように定義されている) 場合、厳密弱順序になります。2 つのキーの等値に関する条件が等価性の条件よりも厳しく、優先される場合、順序付けは完全な順序付け (すべての要素が相互の値に基づいて並べ替えられる) となり、一致するそれぞれのキーを識別するのが難しくなります。

メンバー

コンストラクター

map

特定のサイズのリスト、特定の値の要素を持つリスト、特定の allocator を持つリストを構築します。または他の map のコピーとしてリストを構築します。

Typedef

allocator_type

map オブジェクトの allocator クラスの typedef。

const_iterator

map 内の const 要素を読み取ることができる双方向反復子の typedef。

const_pointer

map 内の const 要素へのポインターの typedef。

const_reference

map に格納された const 要素への参照の typedef (読み取りと const 操作を実行するため)。

const_reverse_iterator

map 内の任意の const 要素を読み取ることができる双方向反復子を提供する型。

difference_type

反復子が指す要素の範囲内にある map の要素の数に対する符号付き整数の typedef。

iterator

map 内の任意の要素の読み取りまたは変更ができる双方向反復子の typedef。

key_compare

2 つの並べ替えキーを比較して、map 内の 2 つの要素の相対順序を決定できる関数オブジェクトの typedef。

key_type

map の各要素に格納されている並べ替えキーの typedef。

mapped_type

map の各要素に格納されているデータの typedef。

pointer

map 内の const 要素へのポインターの typedef。

参照

map に格納されている要素への参照の typedef。

reverse_iterator

反転された map 内の 1 つの要素の読み取りまたは変更ができる双方向反復子の typedef。

size_type

map 内の要素の数に対する符号なし整数の typedef。

value_type

map 内に要素として格納されるオブジェクトの種類の typedef。

メンバー関数

at

指定されたキー値を持つ要素を検索します。

begin

map 内の最初の要素を指す反復子を返します。

cbegin

map 内の最初の要素を指す定数反復子を返します。

cend

定数末尾超え反復子を返します。

clear

map のすべての要素を消去します。

count

パラメーターに指定したキーに一致するキーを持つ、map 内の要素の数を返します。

crbegin

反転された map 内の最初の要素を指す定数反復子を返します。

crend

反転された map 内の最後の要素の次の位置を指す定数反復子を返します。

emplace

インプレースで構築された要素を map に挿入します。

emplace_hint

インプレースで構築された要素を、配置ヒントと共に map に挿入します。

empty

map が空の場合、true を返します。

End

末尾超え反復子を返します。

equal_range

反復子のペアを返します。 ペアに含まれる最初の反復子は、指定したキーよりも大きいキーを持つ、map 内の最初の要素を指します。 ペアに含まれる 2 番目の反復子は、指定したキーと等しいかそれよりも大きいキーを持つ、map 内の最初の要素を指します。

erase

指定した位置から map 内の要素または要素範囲を削除します。

find

指定したキーと同じキーを持つ、map 内の要素の位置を指す反復子を返します。

get_allocator

map の構築に使用される allocator オブジェクトのコピーを返します。

insert

map 内の指定した位置に要素または要素の範囲を挿入します。

key_comp

map 内のキーを並べ替えるために使用される比較オブジェクトのコピーを返します。

lower_bound

指定したキーと等しいかそれよりも大きいキー値を持つ、map 内の最初の要素を指す反復子を返します。

max_size

map の最大長を返します。

rbegin

反転された map 内の最初の要素を指す反復子を返します。

rend

反転された map 内の最後の要素の次の位置を指す反復子を返します。

size

map 内の要素の数を返します。

swap

2 つの map の要素を交換します。

upper_bound

指定したキーよりも大きいキー値を持つ、map 内の最初の要素を指す反復子を返します。

value_comp

map 内の要素の値を並べ替えるために使用される比較オブジェクトのコピーを取得します。

演算子

operator[]

map に、指定したキー値を持つ要素を挿入します。

operator=

別の map のコピーで map の要素を置き換えます。

必要条件

ヘッダー: <map>

名前空間: std

参照

関連項目

C++ 標準ライブラリ内のスレッド セーフ

標準テンプレート ライブラリ

概念

コンテナー

その他の技術情報

<map> メンバー