gpt4 book ai didi

c++ - 按升序对特征向量 Xf 进行排序

转载 作者:可可西里 更新时间:2023-11-01 16:38:12 27 4
gpt4 key购买 nike

我正在尝试按升序对 Eigen VectorXf x 进行排序。

按降序排列:

std::sort(x.data(),x.data()+x.size());

这行不通:

bool myfunction (int i,int j) { return (i<j); }
std::sort(x.data(),x.data()+x.size(),myfunction);

有什么想法吗?

最佳答案

前言
由于原来的问题被证明是一个误解,并且其中的代码已经是正确的答案,所以我决定写一些关于使用 std::sort 的文章并发布。总的来说。

std::sort按元素的弱排序定义的升序对范围进行排序。默认情况下它使用 <在元素上定义的运算符,但它也可以采用函数对象或仿函数来提供比较。此仿函数需要具有签名为 bool operator()(const T& lhs, const T& rhs) const 的正确重载函数.下面是一个例子:

struct FooSorter {
bool operator (const Foo& lhs, const Foo& rhs) const {
return lhs.ham_index < rhs.ham_index;
}
};
/* ... */
std::sort(begin(vec), end(vec), FooSorter());

这将根据 FooSorter 中定义的标准对 vec 表示的整个范围进行排序的 operator() .

因为为简单的事物编写自定义仿函数(按降序排序、按升序排序)会很快变得痛苦,STL 提供了许多模板仿函数,可以在 functional 中使用。 header 。与排序相关的是:

  • std::equal_to实现 x == y

  • std::not_equal_to实现 x != y

  • std::greater实现 x > y

  • std::less实现 x < y

  • std::greater_equal实现 x >= y

  • std::less_equal实现 x <= y

所有这些都是模板化的,可用于实现所需运算符的任何类型。使用这些很容易:

std::sort(begin(vec), end(vec), std::greater<int>());

这将按降序对 vector 表示的范围进行排序。

但是,由于 STL 算法的最大问题之一是定义仿函数的痛苦,C++11 带来了一个新技巧:lambda functions .这使您可以声明函数对象等效内联。示例如下:

std::sort(begin(vec), end(vec), [](int lhs, int rhs){return rhs > lhs});

这也会按降序对 vector 表示的范围进行排序,但我们不必显式声明一个仿函数(或使用已经声明的仿函数)。 (当实现更复杂的比较或不同 STL 算法的仿函数时,这会变得更好。)

关于c++ - 按升序对特征向量 Xf 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21835320/

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