如何排序双数组?

2 c++ arrays sorting double

我得到了一个声明的双数组:

double myArray[4] = {0.0, 5.0, 2.1, 99.1};
Run Code Online (Sandbox Code Playgroud)

但我不知道如何对这个数组进行排序,如(min - max)或其他方向.我在研究期间发现的所有内容都是代码,如何对矢量进行排序.

所以我的问题.如何以正确的方式对此数组应用排序例程?

double myArray[4] = {0.0, 5.0, 2.1, 99.1};

std::sort(myArray.begin(), myArray.end(), [](const double& a, const double& b) {
                return a > b;
            }); // not working this way
Run Code Online (Sandbox Code Playgroud)

lis*_*rus 6

像这样做:

std::sort(std::begin(myArray), std::end(myArray), comparator);
Run Code Online (Sandbox Code Playgroud)

std::beginstd::end是,默认情况下,只返回自由函数x.begin()/ x.end(),分别,从而它们与标准集装箱工作- ,,std::list 等.这些功能也被专门用于普通老式C数组,使上述代码.std::vectorstd::array

你也可以直接抛出指针std::sort,因为指针是迭代器:

std::sort(myArray, myArray + 4, comparator);
Run Code Online (Sandbox Code Playgroud)

但是,这需要您指定数组的大小(尽管可以自动完成),并且一旦更改myArray为a,就会中断std::vector.

需要注意的是std::sort使用std::less,如果你不指定比较,这意味着它在排序默认为按升序排列.如果您需要降序,则可以指定std::greater:

std::sort(std::begin(myArray), std::end(myArray), std::greater<double>{});
Run Code Online (Sandbox Code Playgroud)

  • 你是对的!我刚刚提到`std :: less`,以防OP不知道默认行为.我实际上相信应该知道"更大","更少"和"朋友"的整个参考,因此:http://www.cplusplus.com/reference/functional/greater/ - 从更大的开始,OP可以探索所有其他选项:) (2认同)
  • 值得注意的是,`std::sort` 默认使用 `operator&lt;`,它对指针类型的保证比 `std::less` 少(`std::less` 保证产生指针类型的总顺序,而指针上的“operator&lt;”仅产生部分顺序)。 (2认同)