1

私は次のような地図を持っています:

std::map<A, long> myMap

この地図の順序は重要なので、私は地図がどのように順序付けられるかを理解しようとしています。このクラスのドキュメントには、内部的に、マップ内の要素は、構築に設定された特定の厳密な弱い順序付け基準に従って、低いキー値から高いキー値に並べ替えられていることがわかりましたが、これが何を意味するのかわかりません。順序を理解するために、2つのオブジェクトに対して「<」演算子を呼び出しますか?

また、初期化時に次のようにマップに構造体を渡すことができ、希望どおりに機能することも認識しています。私はそれがデフォルトで何をするのか興味があります。

struct classcomp {
  bool operator() (const A& lhs, const A& rhs) const
   {return lhs<rhs;}
};
4

3 に答える 3

0

順序を理解するために、2つのオブジェクトに対して「<」演算子を呼び出しますか?

はい、次のようになります。

struct A {
    bool operator<(const A& other) const
    {
        return ...; // return true if *this is less than other; false otherwise
    }
};

によって定義された「より小さい」関係operator<が推移的であることを確認してください。つまり、A < BおよびB < Cの場合、同様Aにより小さい必要があります。C

于 2012-12-14T16:16:11.867 に答える
0

デフォルトでは、less<A>これはoperator <(少なくとも専門化されていない場合は)呼び出されます

std::map<A, long, classcomp> myMap並べ替える別の方法が必要な場合は、

于 2012-12-14T16:15:01.667 に答える
0

デフォルトでは、2つのキーを比較するためにstd::map使用します。std::lessデフォルトでは、とstd::less非常によく似ており、比較を行うためにclasscomp使用します。<別の比較関数またはオブジェクトを渡すかoperator<、タイプに合わせて作成することにより、デフォルトの動作をオーバーライドできます。

于 2012-12-14T16:20:38.160 に答える