对于多集的自定义比较,它包含对象的指针(Custom comparator for multiset

2019-07-30 17:50发布

很抱歉的标题不清楚,其实我也没有想到,简明介绍了我的问题称号。

但问题是简单的状态。 我有一个Node类。 我想它的ID_领域保持其对象之间的顺序。 我知道一种制造多重集<节点>将正确地维持该命令在容器中,如果我在过载节点类<操作者或在多集提供一个比较对象。 但是我要声明的是一个mulitset <节点*>容器和想要达到相同的行为。

下面是我的节点类定义:

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_);
        }
};

我该怎么办?

Answer 1:

我想你的意思,你需要的是这样的:

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模板,需要一个二元谓词任何容器,你想间接地应用谓词。



文章来源: Custom comparator for multiset that contains pointers to objects