【发布时间】:2020-09-26 21:45:00
【问题描述】:
我想得到一个基于向量的有序索引值(稍后我将使用这个索引对另一个向量进行排序)。以下代码适用于我的目的:
std::vector<int> order_ideal(std::vector<double> x) {
std::vector<int> idx(x.size());
std::iota(idx.begin(), idx.end(), 0);
std::sort(idx.begin(), idx.end(), [&](int i, int j){return x[i] > x[j];});
return idx;
}
但是,在早期版本的 GCC 编译器中不能使用 lambda 函数,所以我正在寻找另一种不使用 lambda 函数来实现此代码的方法。我真的很喜欢[&] 捕获外部环境变量的方式。也就是说,我想在std::sort()的比较函数中使用来自外部环境的x。
或者,我可以进行以下工作,但在我的计算机上它比上面的功能慢六倍(我还没有检查它与早期 GCC 版本的兼容性):
bool isGreater(int i, int j, std::vector<double> x)
{
return x[i] > x[j];
}
std::vector<int> order_bind(std::vector<double> x)
{
std::vector<int> idx(x.size());
std::iota(idx.begin(), idx.end(), 0);
std::sort(idx.begin(), idx.end(), std::bind(isGreater, std::placeholders::_1, std::placeholders::_2, x));
return idx;
}
我有点明白我需要将这两个向量(idx 和 x 绑定在一起)就像 here 解释的那样。但是在这种情况下我无法实现它。
【问题讨论】:
-
也许替代函数很慢的原因是因为每次调用它时,你可怜的电脑都需要复制整个向量,无缘无故,为了传递参数?您是否尝试过通过引用传递向量参数?有关详细信息,请参阅 C++ 教科书。
标签: c++