C++でベクトルを降順にソートする方法
C++でベクトルをソートするには、std::sort()関数を使用するのが一般的です。この関数は<algorithm>ヘッダーで定義されています。また、等しい要素の相対的な順序を保持する安定ソートが必要な場合は、std::stable_sortを使用します。要件に応じて、クイックソートやマージソートなどのアルゴリズムを自前で実装して使うこともできます。
ベクトルを降順でソートしたい場合は、std::greater<>()を第3引数としてstd::sort()に渡します。
アルゴリズム
開始
ベクトル型の変数 v を宣言する
配列形式で v に初期値を設定する
「ソート前の要素」を出力する
for (const auto &i : v)
変数 i のすべての値を出力する
「ソート後の要素」を出力する
sort(v.begin(), v.end(), greater<>()) を呼び出し、
ベクトル v のすべての要素を降順にソートする
for (const auto &i : v)
変数 i のすべての値を出力する
終了以下は、C++でベクトルを降順にソートするシンプルな例です。
サンプルコード
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
vector<int> v = { 10, 9, 8, 6, 7, 2, 5, 1 };
cout << "ソート前の要素" << endl;
for (const auto &i : v)
cout << i << ' ' << endl;
cout << "ソート後の要素" << endl;
sort(v.begin(), v.end(), greater<>());
for (const auto &i : v)
cout << i << ' ' << endl;
return 0;
}実行結果
ソート前の要素 10 9 8 6 7 2 5 1 ソート後の要素 10 9 8 7 6 5 2 1
ポイント解説
sort(v.begin(), v.end(), greater<>()) のように、第3引数に比較関数オブジェクト std::greater<>() を指定すると、要素が大きい順(降順)に並べ替えられます。デフォルトの std::sort(v.begin(), v.end()) では昇順にソートされるため、降順にしたい場合はこの比較関数の指定が重要になります。
なお、greater<> のようにテンプレート引数を省略できるのはC++14以降です。C++11以前の環境では greater<int>() のように要素の型を明示的に指定する必要がある点に注意してください。
-
C++ STLのmap・multimapを降順で扱う方法
一般に、C++のmapおよびmultimapは、デフォルトではキーを昇順で格納します。しかし、第3テンプレート引数として比較用の関数オブジェクトstd::greaterを指定することで、要素を降順で格納することも簡単にできます。 mapを降順で使用する 使用する主なメンバ関数 m.find() – 指定したキーを持つ要素へのイテレータを返します。見つからない場合はend()イテレータを返します。 m.erase() – マップから指定したキーの要素を削除します。 m.equal_range() – イテレータのペア(pair)を返します。このペアは、指定したキーと等しいキーを持つすべての要素
-
C++ STLを使ってカスタムオブジェクトのvectorをソートする方法
C++では、STLが提供するstd::sort関数を使うことで、カスタムオブジェクトのvector(可変長配列)を簡単に並べ替えることができます。sort関数には、引数として「first(先頭イテレータ)」「last(末尾イテレータ)」「comparator(比較用の述語関数)」を受け取るオーバーロード版があります。firstとlastにはコンテナの最初と最後の要素を指すイテレータを渡し、comparatorにはコンテナをどのようにソートするかを指示する述語関数を指定します。 サンプルコード #include<iostream> #include<algorithm>