gpt4 book ai didi

c++ - 将参数传递给比较函数?

转载 作者:IT老高 更新时间:2023-10-28 21:45:14 24 4
gpt4 key购买 nike

当对 vector 使用 STL 排序算法时,我想传入我自己的比较函数,该函数也接受一个参数。

例如,理想情况下,我想做一个局部函数声明,例如:

int main() {
vector<int> v(100);
// initialize v with some random values

int paramA = 4;

bool comp(int i, int j) {
// logic uses paramA in some way...
}

sort(v.begin(), v.end(), comp);
}

但是,编译器对此有所提示。当我尝试类似:

int main() {
vector<int> v(100);
// initialize v with some random values

int paramA = 4;

struct Local {
static bool Compare(int i, int j) {
// logic uses paramA in some way...
}
};

sort(v.begin(), v.end(), Local::Compare);
}

编译器仍然报错:“错误:使用包含函数的参数”

我该怎么办?我应该用全局比较函数创建一些全局变量吗?

谢谢。

最佳答案

您不能从本地定义的函数中访问函数的局部变量 -- 当前形式的 C++ 不允许 closures .该语言的下一个版本 C++0x 将支持这一点,但语言标准尚未最终确定,目前对当前草案标准的支持很少。

要完成这项工作,您应该将 std::sort 的第三个参数更改为 object instance 而不是函数。 std::sort 的第三个参数可以是任何可调用的(即任何 x,其中添加像 x(y, z) 这样的括号会使句法意义)。最好的方法是定义一个实现 operator() 函数的结构,然后传递该对象的一个​​实例:

struct Local {
Local(int paramA) { this->paramA = paramA; }
bool operator () (int i, int j) { ... }

int paramA;
};

sort(v.begin(), v.end(), Local(paramA));

请注意,我们必须将 paramA 存储在结构中,因为我们无法从 operator() 中访问它。

关于c++ - 将参数传递给比较函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4066576/

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