【问题标题】:Sorting an array of vectors in decreasing order while using a comparator (C++)在使用比较器时按降序对向量数组进行排序(C++)
【发布时间】:2020-02-19 11:18:44
【问题描述】:

我有一个 Car* 对象向量,它们指向具有 id 和 position 属性的对象。我想按位置降序对向量进行排序(即向量 [0] 等处的最高位置)。

下面是排序和比较器代码:

bool comparator(Car* firstObject, Car* secondObject) {
    return firstObject->get_position() > secondObject->get_position();
}

void sortingFunction(vector<Car*> arrayOfCars) {
    sort(arrayOfCars->begin(), arrayofCars->end(), comparator);
}

我尝试使用 std::reverse() 方法,但是(我可能错了)我看到它只适用于数字向量而不是对象向量。枚举是一种使用反向方法的方法,还是有一种方法可以让我通过比较器以某种方式将更大的功能添加到排序函数中?

提前致谢!

【问题讨论】:

  • 如果这是一个 C++ 问题,那么为什么要使用 c 语言标签?请不要使用不相关的标签发送垃圾邮件。
  • 1) 为什么需要std::reverse?您的比较器是否未按您想要的顺序排序? 2) std::reverse 适用于任何提供双向迭代器的容器。 std::vector 中存储的对象类型无关紧要。
  • std::reverse不依赖于容器的内容。
  • 为什么先以一种方式排序,然后再反向排序?为什么不立即以正确的方式排序?
  • 我误读了问题,不得不删除我的答案。实际上有什么问题?为什么要使用std::reverse

标签: c++ sorting oop c++11 vector


【解决方案1】:

排序功能无效。对于初学者,向量应该通过引用传递。并且向量不是通过指针传递的。所以你可能不会对它应用运算符-&gt;

所以函数定义看起来像

void sortingFunction( vector<Car*> &arrayOfCars ) 
{
    sort( arrayOfCars.begin(), arrayofCars.end(), comparator );
}

比较器可以通过这些小改动来编写

bool comparator( const Car *firstObject, const Car *secondObject) 
{
    return firstObject->get_position() > secondObject->get_position();
}

在这种情况下,成员函数get_position 必须是声明为类似的常量成员函数

T get_position() const;
                 ^^^^^ 

其中T 是函数的返回类型。

【讨论】:

  • 你不需要在比较器中使用constvector 不是 const,它不包含 const 指针。如果get_position() 还不是const,则不要在比较器中使用const。但如果get_position()const,那么一定要在比较器中使用const
  • @RemyLebeau 如果指向的数据在函数中未更改,则它们始终应具有限定符 const。
  • 在可行的情况下是 pteferred,是的,但几乎不是必需
猜你喜欢
  • 2013-05-09
  • 2012-02-19
  • 2014-07-24
  • 2018-10-08
  • 2017-04-29
  • 2022-01-02
  • 2019-11-04
  • 2022-07-20
  • 2014-02-16
相关资源
最近更新 更多