0

我有一个 long long 类型的向量并希望按升序对其进行排序,但我认为我误解了 std::sort() 的用法。

#include <vector>
#include <algorithm>
#include <functional>

...

std::vector<long long> numbers (4);
numbers[0] = 6;
numbers[1] = 4;
numbers[2] = 3;
numbers[3] = 7;

我曾尝试使用:

std::sort(numbers.begin(), numbers.end(), std::greater<long long>());

但我收到一个错误,上面写着

std::vector<long long int>’ is not derived from ‘const std::basic_string<_CharT, _Traits, _Alloc>’

另外,理想情况下,我只想在两个元素之间对向量进行排序,例如在 numbers[1] 和 numbers[2] 之间;但是对前两个参数使用这些值似乎不起作用。

谢谢。

编辑:另外,我正在使用 g++ 编译器

4

3 回答 3

10

排序已经按升序排序,所以您只需要

std::sort(numbers.begin(), numbers.end());

您发布的代码将按降序排序,并且可以按原样工作,但您必须#include <functional>

#include <functional> // for std::greater, std::less
#include <algorithm>
#include <vector>

....
std::sort(numbers.begin(), numbers.end(), std::greater<long long>());
于 2012-12-20T22:00:02.147 回答
2

你现在所拥有的已经是正确的。(假设它正确表达了您的意图。您需要升序还是降序排序?)。

您收到的错误消息可能是由于您忘记包含某些头文件引起的。只是碰巧算法的某些重要部分(std::greater?)的实现仅被部分包括在内,对于std::string,但不包括一般情况。

确保包含<vector>,<algorithm><functional>,后者是缺少标题的最有可能的候选者。你包括了<functional>吗?

于 2012-12-20T22:05:12.010 回答
1

默认情况下,std::sort会将它们按升序排列。

如果您希望它们下降,请在容器上向后迭代:

std::sort(numbers.rbegin(), numbers.rend());
于 2012-12-20T23:09:45.257 回答