c++ - 用于对包含指向自定义类对象的指针的 vector 进行排序的比较器

标签 c++ sorting vector

通过这个问题,我也试图了解 C++ 的基础知识,因为我对 C++ 非常陌生。对于对自定义类的 vector/列表进行排序的问题有很多很好的答案,例如 this 。在所有示例中,传递给 sort 的比较器函数的签名如下:

(const ClassType& obj1, const ClassType& obj2)

此签名对于比较器函数是必需的吗?或者我们也可以提供类似的东西:

(ClassType obj1, ClassType obj2)

假设我将相应地修改比较器的主体。

如果第一个签名是强制性的,那么为什么? 我想了解使用 constreference'&' 背后的原因。 我能想到的是 const 是因为您不希望比较器函数能够修改元素。并且引用是为了不创建多个拷贝。

如果我想对包含指向自定义类对象的指针的 vector 进行排序,我的签名应该如何?像(1)或(2)(见下文)或两者都有效? 要排序的vertor是 vector 类型

(1)

(const ClassType*& ptr1, const ClassType*& ptr2)

(2)

(ClassType* ptr1, ClassType* ptr2)

最佳答案

我建议查看This Documentation .

它解释了比较函数的签名必须等于:

bool cmp(const Type1& a, const Type2& b);

更准确地说,它接着解释说每个参数都需要是一个可隐式转换的类型,该类型是通过将迭代器解引用而获得的对象。排序功能。

如果你的迭代器是 std::vector<ClassType*>::iterator那么你的参数需要隐式转换ClassType* .

如果您使用的是相对较小的东西,例如 intpointer那么我会按值(value)接受它们:

bool cmp(const ClassType* ptr1, const ClassType* ptr2) // this is more efficient

注意:我让它们指向 const因为排序函数不应修改正在排序的值。

关于c++ - 用于对包含指向自定义类对象的指针的 vector 进行排序的比较器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40065593/

相关文章:

c++ - 添加 vector

c++ - 类型转换、显式构造函数等

c++ - 可变参数模板(带有类和函数)编译失败

python - 为多个数组实现 numpy.in1d 的最有效方法

计数排序不对最后一个元素进行排序 C

c++ - 打印 vector - 空输出

c# - 在 c#、c++ 和 java 中创建 python 弱类型结构的强类型版本

c# - 自定义容器类成员的 List<T>.Sort() 与 List<T>.OrderBy() 的实用程序

c++ - 如何在 C++ 中将字符串 vector 转换为整数 vector ?

python - Shapely:3D 中线和多边形的交点