如何在不使用全局变量的情况下将第二个向量传递给作为 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});