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>’

また、理想的には、2つの要素間、たとえば数値[1]と数値[2]の間でのみベクトルをソートしたいと思います。ただし、最初の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 に答える