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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何对c ++上的指针列表进行排序?相关的知识,希望对你有一定的参考价值。

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

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

以上是关于如何对c ++上的指针列表进行排序?的主要内容,如果未能解决你的问题,请参考以下文章

如何根据属性值对对象列表进行排序

如何对对象集合上的字符串日期进行排序

c语言中怎样实现对二维数组元素进行赋值并输出。

html5,移动:按距离对 POI 进行排序

C#如何对二维数组矩阵进行算术运算

使用 Game Maker Studio 2 中的快速排序算法对列表进行排序