std :: set <myclass *>已排序

时间:2017-05-11 01:38:21

标签: c++ stl set

我想知道如何拥有一个排序集,一组指向对象的指针,最简单的方法,如

std::set<myClass*> mySet;

我希望这个集合按myClass :: someProperty排序(例如,一个int)。

我应该重载运算符&lt;在myClass?我不确定它是否会起作用,因为它不是一组myClass,而是一组指针。

如何定义比较功能?

非常感谢。

2 个答案:

答案 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 ...
   }
};
}