如何传递用户数据来比较std :: sort的功能?

0x6*_*015 0 c++ sorting stl

就像qsort(),似乎C++ std::sort()不允许将用户数据传递给sort函数.

例如:struct A { int version; int index; } array[100]必须按顺序对结构数组进行排序,但使用此数组struct B { int value; } key[100]作为排序键.struct A::index索引数组key.

这是一个非工作排序函数.它需要以key某种方式指向数组的指针:

bool comp(struct A *a1, struct A *a2) {
    return key[a1->index].value < key[a2->index].value;
}
Run Code Online (Sandbox Code Playgroud)

如何使用C++实现这一目标?如何将非全局用户数据key传递给排序函数?

我试图将一个对象实例作为std::sortcomp 传递,但似乎只qsort()允许类似函数.

(在GNU C中,嵌套比较函数可用于使用作用域变量,但GNU C++不提供嵌套函数).

Lig*_*ica 7

函数不一定是函数; 它们可以是物体.

struct Comparator {
   Comparator(int* key) : key(key) {};
   bool operator()(struct A *a1, struct A *a2) {
      return key[a1->index].value < key[a2->index].value;
   }

   int* key;
};

/* ... */

std::sort(container.begin(), container.end(), Comparator(<pointer-to-array>));
Run Code Online (Sandbox Code Playgroud)