c++ - 在 C++ 中使用第二个索引数组对数组进行排序

标签 c++ arrays sorting indexing

我有一个自定义对象的 arr1,但其中一个成员是 arr1.percentChanged 我需要第二个数组来存储按 percentChanged 排序的 arr1 的索引值,但保持第一个数组不变。

变化的百分比是双倍 [8.67, -9.64, 14.83, 0.99, -5.33] 我将 arr2 初始化为 [0,1,2,3,4] 但我不知道如何对其进行排序。即它应该是 [2,0,3,4,1]。非常感谢任何有关如何执行此操作的帮助。

我认为我的问题是我的第一个数组不是 double 组,而是 stockObjects 数组。所以 arr1 实际上是 [obj1,obj2...] 但每个 obj 都有一个 obj.percentChanged 成员。它们在 arr1 中按 obj.name 排序。我有一个名为 stockListType 的第二个自定义对象,它需要一个 sortPercentageIndex。 stockList 对象有 1 个数组,按照从文件中读取的顺序存储所有 stockObjects。它还包含 sortPercentageIndex 数组。我需要一个 sortByPercentage 方法来按降序对索引数组进行排序。如果有帮助,我可以发布一些代码,但它是一个更大程序的一部分,并且一些类是子类,所以我担心如果不全部看到它就没有意义。

最佳答案

将比较仿函数传递给您的排序函数:

struct comparePercentChanged
{
  const double* arr1;
  comparePercentChanged( const double* arr1 ): arr1(arr1) { }
  bool operator < ( int index1, int index2 ) const
  {
    return arr1[index1] < arr1[index2];
  }
};

std::sort( begin(arr2), end(arr2), comparePercentChanged(arr1) );

或者,您可以使用 lambda:

std::sort( begin(arr2), end(arr2), [const &arr1]( int index1, int index2 ) -> bool
{
  return arr1[index1] < arr1[index2];
} );

(这一切都假设 arr2 是一个 int 索引数组。)

关于c++ - 在 C++ 中使用第二个索引数组对数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33513010/

相关文章:

c# - 在 C# 中比较一个 int 和多个 int 数组

sorting - 如何在 Google 表格中以相反的顺序填写公式

arrays - 排序算法与简单迭代

c++ - 在一行上声明多个对象指针会导致编译器错误

c++ - 条件中的逗号运算符

mysql - Yii2 更新条件是一个数组

java - Java 中字符串的传统西类牙语排序

python - 使用 Raspberry pi 3、OpenCV 和 Python 的运动跟踪器

c++ - binutils和gcc有什么关系?

java - 根据输入参数调用不同类的方法