使用myclass :: operator <(myclass&other)对std :: list <myclass*>进行排序

Mar*_*ing 7 c++ std

我有一个std::list<myclass*>,在我的课堂上,我已经myclass::operator<(myclass &other)定义了.

我使用该std::list.sort()函数,但它不会更改该列表中的任何内容.也许它只是对指针进行排序?

如何对该列表中的实际项目进行排序?

Ker*_* SB 13

您正在排序指针值,而不是myclass值.您必须编写自己的谓词来通过取消引用来比较指针:

template <typename T> bool PComp(const T * const & a, const T * const & b)
{
   return *a < *b;
}

std::vector<Foo*> myvec;
std::list<Foo*> mylist;
std::sort(myvec.begin(), myvec.end(), PComp<Foo>);
mylist.sort(PComp<Foo>);
Run Code Online (Sandbox Code Playgroud)

顺便说一句,我认为你不能排序std::liststd::sort<algorithm>,因为它不是随机访问.sort正如MerickOWA所说,使用成员函数.(但是,这通常比排序随机访问容器效率较低).此外,你可以立即存储在一个排序容器像你的对象std::set<Foo*, PPred>,其中PPred是谓词的函子版本:

struct PPred {
  template <typename T> inline bool operator()(const T * a, const T * b) const
  { return *a < *b; }
};
Run Code Online (Sandbox Code Playgroud)