簡體   English   中英

如何初始化std :: set比較器?

[英]How do I initialize a std::set comparator?

我需要使用另一個類Object的某個對象o初始化基於std :: set的新數據類型TType的一些比較器:

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...
      }
};

如果聲明在某個方法中(當對象已經創建時),情況將非常簡單......我該怎么辦?

模板參數需要是比較器的類型 ,而不是該類型的特定對象; 您可以提供要在std::set構造函數中使用的特定比較器對象:

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

Object o;
TType mySet(sortSet(o));

我不確定我是否理解你的實際問題,但是,使用自定義比較器的一般習慣用法如下所示。

#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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM