1

std::set に基づく新しいデータ型 TType のコンパレータを、別のクラス Object のオブジェクト o で初期化する必要があります。

typedef std::set <unsigned int, sortSet(o)> TType

この宣言は、クラスの外側 (ヘッダー ファイル内) にあります。宣言の時点では、このオブジェクトは存在している必要はありません。後で作成されます。

class sortSet
{
   private:
      Object o;

   public:
      sortSet(Object &oo): o(oo) {}
      bool operator() ( const unsigned int &i1, const unsigned int &i2 ) const
      {
         //Some code...
      }
};

宣言が何らかのメソッド内にある場合 (オブジェクトが既に作成されている場合)、状況は非常に単純になります...どうすればよいですか?

4

2 に答える 2

3

テンプレート パラメータは、その型の特定のオブジェクトではなく、コンパレータのである必要があります。std::setコンストラクターで使用する特定のコンパレーター オブジェクトを提供できます。

typedef std::set<unsigned int, sortSet> TType;

Object o;
TType mySet(sortSet(o));
于 2010-09-23T21:41:46.607 に答える
1

あなたの実際の質問を理解したかどうかはわかりませんが、カスタム コンパレータを使用する一般的なイディオムを次の不自然な例に示します。

#include <set>

class foo {
  public:
    int i_;
};

struct foo_comparator {
    bool operator()( foo const & lhs, foo const & rhs ) {
        return lhs.i_ < rhs.i_;
    }
};

typedef std::set< foo, foo_comparator > foo_set;

int main() {
  foo_set my_foo_set;
}
于 2010-09-23T22:10:35.623 に答える