c++ - 根据另一个数组的值对一个数组进行排序?

标签 c++ arrays sorting

<分区>

我有一个指向对象的指针数组,这些对象是我不想更改的来自外部代码的类的实例。

我还有一个整数 vector ,它是通过对每个对象调用一个函数生成的。所以我有

A:  [pointerToObj1, pointerToObj2, ... pointerToObjN]

B:  [obj1Int, obj2Int, ..... objNInt]

我如何轻松地对 A 进行排序,使其按 B 的值排序。我有 boost 可用。

如果B是

[3, 1, 2]

我想对 A 进行排序,使其符合顺序

[pointerToObj2, pointerToObj3, pointerToObj1]

在 javascript 中你可以这样做

B.sort(function(a,b){return A[B.indexOf(a)] < A[B.indexOf(b)];});

最佳答案

  1. 制作一个包含 A 和 B 的 vector 对。

    vector<pair<pointerToObjType, int>> order(N);
    for (int i=0; i<N; ++i){
        order[i] = make_pair(A[i], B[i]);
    }
    
  2. 创建您的自定义比较器以对对 vector 进行排序。

    struct ordering {
        bool operator ()(pair<pointerToObjType, int> const& a, 
                         pair<pointerToObjType, int> const& b) {
            return a.second < b.second;
        }
    };
    
  3. 对 vector 对进行排序。

    sort(order.begin(), order.end(), ordering());
    
  4. 可以使用 order[i].first 访问所有排序的 A。

关于c++ - 根据另一个数组的值对一个数组进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26569801/

相关文章:

C++ 在 8086 中获取类/结构地址

c - malloc.c 中的断言 :2453

arrays - 在 Matlab 中有效地存储 moSTLy 零的 N 维数组

javascript - 使用日期类型对数组进行排序

c++ - 为什么在 C++ 中进行强制转换会打印出意想不到的结果?

c++ - 链接器多重定义错误 : Why does <thread> seem to define my functions?

linux - sort -u 的意外结果

Python外部合并排序运行缓慢

C++ 回调?我应该使用成员函数指针/委托(delegate)/事件吗?

arrays - 如何向排序数组添加特定数量的反转