gpt4 book ai didi

c++ - 在模板参数中传递 vector

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

我想定义一个比较函数,以便它可以传递给 std::sort。比较需要根据 vector x 的顺序进行,如下面的“compare_by_x”函数所示。

template <std::vector<double> x>
bool compare_by_x(int i, int j){
return x[i] <= x[j];
}

我想按如下方式传递 compare_by_x 函数。这是行不通的。

std::sort(some_index_vector.begin(), some_index_vector.end(), compare_by_x<x>);

最佳答案

您不能将对象引用传递给模板或函数。但您可以将它们传递给结构。

这是工作示例:

#include <iostream>
#include <vector>
#include <algorithm>

struct compare_by_x
{
std::vector<double>& x;
compare_by_x(std::vector<double>& _x) : x(_x) {}

bool operator () (int i, int j)
{
return x[i] <= x[j];
}
};

int main(int argc, const char *argv[])
{
std::vector<double> some_index_vector;
some_index_vector.push_back(0);
some_index_vector.push_back(1);
some_index_vector.push_back(2);
std::vector<double> x;
x.push_back(3);
x.push_back(1);
x.push_back(2);

std::sort(some_index_vector.begin(), some_index_vector.end(), compare_by_x(x));

for (std::vector<double>::const_iterator it = some_index_vector.begin(); it != some_index_vector.end(); ++it)
{
std::cout << *it << ' ';
}
std::cout << std::endl;

return 0;
}

关于c++ - 在模板参数中传递 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17361529/

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