多集的自定义比较器,包含指向对象的指针

时间:2012-08-02 09:35:50

标签: c++ operator-overloading

很抱歉标题不清楚,实际上我无法想到一个简明扼要地描述我的问题的标题。

但问题很简单。我有一个Node类。我想通过其id_字段维护其对象之间的顺序。我知道制作一个多节点< Node>如果我重载<将正确维护容器中的顺序Node类中的运算符或在multiset中提供Comparator对象。但是我想声明一个多节点< Node *>容器并希望实现相同的行为。

这是我的Node类定义:

class Node {
        int id_;
        ...
        public:
        Node() {
                ...
        }
        int getId() {
                return id_;
        }
        void setId(int id) {
                id_ = id;
        }
        ...
        bool operator<(const Node &input) {
                return (this->id_ < input.id_);
        }
};

我该怎么办?

1 个答案:

答案 0 :(得分:5)

我认为你的意思和你需要的是:

template <typename T, typename Pred = std::less<T>>
struct ptr_compare : Pred
{
    ptr_compare(Pred const & p = Pred()) : Pred(p) { }

    bool operator()(T const * p1, T const * p2) const
    {
        return Pred::operator()(*p1, *p2);
    }
};

typedef std::multiset<Node*, ptr_compare<Node>> node_ptr_set;

您可以将ptr_compare模板用于需要二元谓词的任何容器,并且您希望间接应用谓词。