如何在 c++ 上对指针列表进行排序
How can I sort a list of pointers on c++?
我必须像这样对指针列表进行排序:
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);
相关文章:
- 试图在c++中对数字列表进行排序
- 在STL - C++中按成绩对学生列表进行排序?
- 使用列表 STL 递归进行插入排序
- 列表 iter 不取消引用 使用列表进行插入排序
- 如何在 c++ 中根据第二个元素按降序对列表进行排序
- 为什么在排序链表上的这种合并实现总是将两个列表都设置为 NULL,而只有一个应该设置一个列表?
- 如何按键对 std::对列表进行排序?
- 如何通过保持第一个插入的位置来对列表中插入的其余元素进行排序?
- 如何使用cpp编写选择排序算法以降序对元素列表进行排序?
- 使用自定义比较函数在类内进行列表排序
- 列表::排序更改值C
- 对于列表排序,有没有办法使用相同的参数让多个运算符重载?
- 在 c++ 中将数字从列表排序到数组中的气泡排序问题
- 运算符<用于列表排序
- C++列表排序功能
- C++ STL 算法(列表排序)OpenMP/多线程实现
- 列表排序不正确
- 列表排序和结构体向量排序之间的性能差距.c++
- 对抽象数据类型的stl::列表排序
- C++std列表排序使用自定义比较器,该比较器依赖于对象实例的成员变量