就像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++不提供嵌套函数).
函数不一定是函数; 它们可以是物体.
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)
| 归档时间: |
|
| 查看次数: |
2518 次 |
| 最近记录: |