2

次の仮定に頼ることができますか (つまり、標準で保証されていますか?)。

  • set<T>::begin()セット内の最小の要素を指しますか?
  • セットを反復処理すると (from set<T>::begin()until set<T>::end())、昇順で要素が得られますか?
  • 念のために言っておきますが、これらのプロパティは のキーに対して保持されますmapか?

つまりsetmapからSTL

PS私は知っていてoperator<()、独自のコンパレーターを定義しています。これについてどのような基準が述べられているかを確認してください。

4

3 に答える 3

6

順序は、使用されているファンクターの比較によって異なります(マップ上の3番目のテンプレート引数、セット上の2番目)。デフォルトはですstd::less<T>。これは、セット/マップに昇順を与えます。はい。

于 2012-06-10T12:03:31.260 に答える
6

bool operator<はい、要素(キー)またはテンプレートパラメーターとしてセット(マップ)に渡された比較ファンクターに応じて、定義上、これに依存できます。したがって、使用するコンパレータに応じて、順序は最小から最大になります。

C ++ 11標準、§23.2.4では、連想コンテナの要件を扱います。

各連想コンテナは、Keyと、Keyの要素に厳密な弱順序(25.4)を誘導する順序関係Compareでパラメータ化されます。さらに、mapとmultimapは、任意のタイプTをキーに関連付けます。タイプCompareのオブジェクトは、コンテナの比較オブジェクトと呼ばれます。

次に、同じセクションで:

連想コンテナのイテレータの基本的な特性は、キーの非降順でコンテナを反復処理することです。ここで、非降順は、それらを構築するために使用された比較によって定義されます。iからjまでの距離が正になるような2つの参照解除可能なイテレータiおよびjの場合、value_comp(* j、* i)== false

ここvalue_compで、は比較関数です。

于 2012-06-10T12:03:49.477 に答える
1

簡単な答え:はい。

より長い答え:std::setとstd::mapはどちらも、2番目のテンプレート化された引数(要素を比較するためのバイナリ述語)を取ります。デフォルトでは、これはstd ::less(単一のブール関数を実装するクラス)です。これは、それ自体、演算子<で定義されます。

stlテンプレートをインスタンス化するときに特に指定しない限り、演算子<はキーの順序を定義します。注意(部分的な)順序を定義しないブール述語を使用すると、奇妙なことが起こる可能性があります。:)

于 2012-06-10T12:06:43.673 に答える