2016-07-14 15 views
1

<演算子にオーバーロードされたオブジェクトのstd::vectorがあります。std ::演算子のオーバーロードで降順をソート

std::sortを使用して降順でソートするにはどうすればよいですか(自分のコンパレータを記述する必要はありません)。

+1

'のstd ::ソート((V)の端を開始(V)のstd ::大きい<>);' – SirGuy

+3

'のstd ::ソート(v.rbegin()、v.rend()) ; –

+0

[降順でベクタを並べ替える]の複製が可能です。(http://stackoverflow.com/questions/9025084/sorting-a-vector-in-descending-order) – SirGuy

答えて

6

あなたは、単にstd::bindの助けを借りてstd::lessに引数をトランスポーズできます。

using namespace std::placeholders; 
std::sort(v.begin(), v.end(), std::bind(std::less<T>{}, _2, _1)); 

しかし、私はそれはの制約に反していても、単に同等の短いラムダを書くためにずっときれいだろうと思いますあなたはstd::sortを使用して配列をソートしてからでそれを逆にすることができます

std::sort(v.begin(), v.end(), [](T const& lhs, T const& rhs) { return rhs < lhs; }); 
+0

さらには 'std :: greater ' – SirGuy

+0

@GuyGreerいいえ、 'std :: greater 'ではありません。 – Barry

+1

'std :: greater'は' not2(std :: less) 'と同じではありませんが、ソート中に同じ結果が返ってくることは間違いありません。 – SirGuy

2
std::sort(v.rbegin(), v.rend()); 
0

:あなた自身のコンパレータを書いていません。これはあなたの望むように並べ替えます。

std::sort(v.begin(), v.end()); 
std::reverse(v.begin(), v.end()); 
関連する問題