gpt4 book ai didi

c++ - 使用 myclass::operator<(myclass &other) 对 std::list 进行排序

转载 作者:可可西里 更新时间:2023-11-01 18:08:28 25 4
gpt4 key购买 nike

我有一个 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 进行排序与 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; }
};

关于c++ - 使用 myclass::operator<(myclass &other) 对 std::list<myclass*> 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6404160/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com