[英]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.