此代码有效,但有一个名为 ptrcomp
的结构外面weighted_pointer
似乎(对我而言)它们是不同的东西。我尝试了一些不同的方法,甚至用谷歌搜索,但我还没有找到像这样工作的东西。
struct node{
unsigned int oper;
void * a;
void * b;
};
struct weighted_pointer{
mutable int weight;
unique_ptr<node> pointer;
};
struct ptrcomp{
bool operator()(const weighted_pointer & lhs, const weighted_pointer & rhs) {
return tie(lhs.pointer->oper, lhs.pointer->a, lhs.pointer->b) < tie(rhs.pointer->oper, rhs.pointer->a, rhs.pointer->b);
}
};
set<weighted_pointer,ptrcomp> gate;
我的目标是制作 std::set
在职的。并且可能写成 set<weighted_pointer>
.
最佳答案
having a struct called ptrcomp outside the weighted_pointer seems (to me) that they are different things.
事情就是这样。 weighted_pointer
是数据,而 ptrcomp
是一种比较数据的方法。所以,这两个确实是不同的东西,您的代码没有任何问题。
如果您碰巧有一种比较数据的规范方法,请将其放入 operator <
中:
bool operator < (const weighted_pointer & lhs, const weighted_pointer & rhs) {
return tie(lhs.pointer->oper, lhs.pointer->a, lhs.pointer->b) < tie(rhs.pointer->oper, rhs.pointer->a, rhs.pointer->b);
}
std::set
如果您将其用作 std::set<weighted_pointer>
,我们会很高兴地使用它(事实上,std::set
的第二个模板参数默认为 std::less<T>
,这是一个使用 operator <
的比较器类)。
关于c++ - 集合的结构之间的比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31859340/