Pra*_*kar 2 c++ operator-overloading
很抱歉标题不清楚,实际上我无法想到一个简洁地描述我的问题的标题.
但问题很简单.我有一个Node类.我希望通过其id_字段维护其对象之间的顺序.我知道如果我在Node类中重载<运算符或在multiset中提供Comparator对象,那么创建多节点<Node>将正确维护容器中的顺序.但我想声明一个multiset <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_);
}
};
Run Code Online (Sandbox Code Playgroud)
我该怎么办?
我想你的意思和你需要的是这个:
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;
Run Code Online (Sandbox Code Playgroud)
您可以将ptr_compare模板用于需要二进制谓词的任何容器,并且您希望间接应用谓词.