gpt4 book ai didi

c++ - 包含指向对象指针的多重集的自定义比较器

转载 作者:搜寻专家 更新时间:2023-10-31 00:42:38 24 4
gpt4 key购买 nike

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

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

这是我的节点类定义:

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

我该怎么办?

最佳答案

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

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 模板用于任何需要二元谓词并希望间接应用谓词的容器。

关于c++ - 包含指向对象指针的多重集的自定义比较器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11774761/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com