我必须对这样的指针列表进行排序:
list< pair< MyClass*,double> * > * myList
myClass代码:
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,在排序算法之后,我想要myList中的pair1,pair2,pair3。
如果不手动实现排序算法,我可以这样做吗? 谢谢你的回答: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);