gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 14:57:36 25 4
gpt4 key购买 nike

qsort() 一样,C++ std::sort() 似乎不允许将用户数据传递给排序函数。

例如:结构数组,如 struct A { int version;整数索引; } 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;
}

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

我试图将对象实例作为 std::sort comp 传递,但似乎只允许使用类似 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>));

关于c++ - 如何传递用户数据来比较 std::sort 的功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5733202/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com