我有一个std::list<myclass*>
在我的课堂上我有myclass::operator<(myclass &other)
定义的。
我用std::list.sort()
函数,但它不会改变该列表中的任何内容。也许它只是对指针进行排序?
我如何对该列表中的实际项目进行排序?
您正在对指针值进行排序,而不是对 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>);
顺便说一句,我认为你无法排序std::list
with std::sort
from <algorithm>
因为它不是随机访问。使用成员函数sort
相反,正如 MerickOWA 所说。 (但这通常比对随机访问容器进行排序效率低。)或者,您可以立即将对象存储在排序容器中,例如std::set<Foo*, PPred>
, where PPred
是谓词的函子版本:
struct PPred {
template <typename T> inline bool operator()(const T * a, const T * b) const
{ return *a < *b; }
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)