0

マップのキー比較に Comparator を使用しようとしています。

std::map<SomePointer,SomeValue, SomeComparator> testMap;

class SomeComparator
{
   SomeComparator( ){ }

   bool operator()( const SomePointer& sp1, const SomePointer& sp2) const
   {
      return sp1 == sp2;
   }
}

私の質問は、 map::find が2つのポインターを比較して一致するものを取得するために適切なコンパレーターを使用できるようにするために、 operator( ) または何か他のものをオーバーロードする必要があるかどうかです。

4

1 に答える 1

3

マップの場合、比較のタイプを提供する必要があります<。具体的には、「厳密な弱い順序付け」です。A が B より小さくなく、B が A より小さくない場合、等しいと推測されます。

しかし、あなたが実際に尋ねた質問に答えるには、上記のように比較ファンクターを提供している場合operator()、そのファンクターをオーバーロードします。それ以外の場合はoperator<、キーの種類をオーバーロードできます。

于 2013-01-07T19:18:41.840 に答える