簡體   English   中英

自定義類的自定義比較器,就像STL

[英]Custom comparator for custom class, just like STL

我有一個自定義類Binary search Tree。 我想將比較器類作為參數傳遞(默認為std :: less)。 我搜索的大多數答案都使用STL對象,然后傳遞其自定義比較器。 我想要不同的東西。

//樹類

template <class T,class Compare = less<T>>
class Tree
{
    struct TreeNode
    {
        T data;
        struct TreeNode *  left;
        struct TreeNode *  right;
    };
public:
    void insert(T);
};

//自定義比較器類

template <class T>
class CustomCompare
{
public:
    bool compare(const T&, const T &);
};


template<class T>
bool CustomCompare<T>::compare(const T & a, const T &b)
{
    cout << "calling custom comparator";
    return a<b;
}

//插入樹

template<class T,class Compare>
void Tree<T,Compare>::insert(T val)
{
      // HOW DO I CALL COMPARE HERE? I tried this
      if (compare(val->data , treeNode->data))  /// does not work.
       // I get error - use of undeclared identifier compare.


      //IF I DO THIS, I get error - expected unqualified id
       Compare<T> x; // cannot create instance of Compare

      // IF I DO THIS< I can create instance of Compare but cannot call function compare.
       Compare x;

       x.compare(....) -- Error no member named compare in std::less


}

我不能使CustomCompare::compare靜態,因為我也希望代碼也可以用於std :: less。

我希望問題清楚。

注意:我知道我可以重載將使用operator <的類。 如果這些類的源代碼不可用,我正在為情況做准備

std::less具有以下比較對象的功能。

bool operator()( const T& lhs, const T& rhs ) const;

如果要使用自定義的比較類作為均等的替代品,則該類中也必須具有這樣的功能。

然后,將其用作:

  if (compare()(val->data , treeNode->data))

暫無
暫無

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

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