很抱歉标题不清楚,实际上我无法想到一个简明扼要地描述我的问题的标题。
但问题很简单。我有一个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_);
}
};
我该怎么办?
答案 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
模板用于需要二元谓词的任何容器,并且您希望间接应用谓词。