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

问题描述 投票:-1回答:3

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

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

c++ list sorting
3个回答
5
投票

使用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);

1
投票

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; }
 };

0
投票

我必须说,这有太多指针。只需简单地使用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);
© www.soinside.com 2019 - 2024. All rights reserved.