我有一个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::list与std::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)
| 归档时间: |
|
| 查看次数: |
9470 次 |
| 最近记录: |