我想知道如何拥有一个排序集,一组指向对象的指针,最简单的方法,如
std::set<myClass*> mySet;
我希望这个集合按myClass :: someProperty排序(例如,一个int)。
我应该重载运算符&lt;在myClass?我不确定它是否会起作用,因为它不是一组myClass,而是一组指针。
如何定义比较功能?
非常感谢。
答案 0 :(得分:4)
您需要定义一个类型(或函数)来取消引用指针并比较它们指向的对象的属性,这是一般顺序:
class myClass {
int value;
public:
myClass(int i = 0) : value(i) {}
struct cmp {
bool operator()(myClass *const &a, myClass *const &b) const {
return a->value < b->value;
}
};
};
我们他们定义了这样的集合:
std::set<myClass*, myClass::cmp> mySet;
然而,我的建议是存储对象而不是指针(如果可能的话)。
答案 1 :(得分:3)
你也可以为你的myClass *专门化std :: less,如下所示,然后在创建set时不需要传递比较器:
namespace std {
template<>
struct less<myClass*>
{
bool operator()(const myClass* k1, const myClass* k2) const
{
// Some code ...
}
};
}