如何在 c++ 上对指针列表进行排序

How can I sort a list of pointers on c++?

本文关键字:列表 排序 指针 c++      更新时间:2023-10-16

我必须像这样对指针列表进行排序:

list< pair< MyClass*,double> * > * myList

我的类代码:

class MyClass {
private: 
int id;
public: 
MyClass(int id){ 
this.id=id;}
///...
}

所以我必须订购myList增加MyClass的ID示例: 如果我有

pair<MyClass*,double> * pair1=new pair<MyClass*,double>(new MyClass(1),1.0);
pair<MyClass*,double> * pair2=new pair<MyClass*,double>(new MyClass(2),1.0);
pair<MyClass*,double> * pair3=new pair<MyClass*,double>(new MyClass(3),1.0);

我按照排序算法后的顺序将 pair2、pair3、pair1 添加到 myList 中 我想要 pair1,pair2,pair3 in myList。

我可以在不手动实现排序算法的情况下执行此操作吗?
感谢您的回答:D

std::list::sort与类似于以下内容的自定义二进制比较函数一起使用:

bool cmp(const pair< MyClass*,double> * &a, const pair< MyClass*,double> * &b)
{
return a->first->getID() < b->first->getID();
}

然后:

myList.sort(cmp);

std::list::sort()可以采用自定义比较函数。只需写:

myList.sort([](const auto& p1, const auto& p2) {
return *p1->first < *p2->first;
});

这需要operator<(MyClass, MyClass)定义:

class MyClass
{
/* ... */
friend bool operator<(MyClass const& lhs, MyClass const& rhs) { return lhs.id < rhs.id; }
};

我必须说,你拥有的指针太多了。简单地std::list< std::pair<MyClass,double>> myList;就可以了,并且在追踪和摧毁所有物体时会为您省去很多麻烦。

现在,排序。确定:

#include <algorithmh>
...
class MyClass {
...
public:
int getId() const { return id; }
...
};
bool my_compare(const std::pair< MyClass*,double> *& lhs, const std::pair< MyClass*,double> *& rhs) {
return lhs->first->getId() < rhs->first->getId();
}

然后打电话

myList->sort(my_compare);