如何在不使用全局变量的情况下将第二个向量传递给作为 C++ STL 中 sort() 函数的第三个参数的函数?
How to pass a second vector into the function that is the third argument of sort() function from C++ STL without using global variables?
我想将以下函数作为 C++ STL 中 sort() 函数的第三个参数传递。
bool fn(int a, int b, vector<int> v1)
{
if (v1[a]< v1[b]) return true;
else return false;
}
我想根据另一个向量中的值对一个向量进行排序。
sort(v2.begin(), v2.end(),fn);
如何将第一个向量 v1
传递给函数 fn
以便函数 fn
可以使用它对第二个向量 v2
进行排序而不使用全局变量?
首先,您的比较器签名有误。 std::sort
需要一个可以用 2 个元素调用的可调用对象。
您可以使用捕获向量的 lambda 表达式:
sort(v2.begin(), v2.end(),[&v1](const auto& a,const auto& b){ return v1[a]< v1[b]; });
I tried to write this function fn
inside main
in hopes that it would be in scope but that didn't work.
不能在函数内定义函数。您可以在函数内使用 operator()
定义类型,这基本上就是 lambda 表达式的作用。以下手写仿函数将实现相同的目的:
struct my_comparator {
std::vector<int>& v1;
bool operator(size_t a,size_t b) {
return v1[a] < v1[b];
}
};
std::sort(v2.begin(),v2.end(),my_comparator{v2});
我想将以下函数作为 C++ STL 中 sort() 函数的第三个参数传递。
bool fn(int a, int b, vector<int> v1)
{
if (v1[a]< v1[b]) return true;
else return false;
}
我想根据另一个向量中的值对一个向量进行排序。
sort(v2.begin(), v2.end(),fn);
如何将第一个向量 v1
传递给函数 fn
以便函数 fn
可以使用它对第二个向量 v2
进行排序而不使用全局变量?
首先,您的比较器签名有误。 std::sort
需要一个可以用 2 个元素调用的可调用对象。
您可以使用捕获向量的 lambda 表达式:
sort(v2.begin(), v2.end(),[&v1](const auto& a,const auto& b){ return v1[a]< v1[b]; });
I tried to write this function
fn
insidemain
in hopes that it would be in scope but that didn't work.
不能在函数内定义函数。您可以在函数内使用 operator()
定义类型,这基本上就是 lambda 表达式的作用。以下手写仿函数将实现相同的目的:
struct my_comparator {
std::vector<int>& v1;
bool operator(size_t a,size_t b) {
return v1[a] < v1[b];
}
};
std::sort(v2.begin(),v2.end(),my_comparator{v2});