C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++のSTLを使ってvectorを降順にソートする方法をわかりやすく解説

このチュートリアルでは、C++のSTL(標準テンプレートライブラリ)を使用して、vectorの要素を降順にソートする方法について解説します。

vectorを降順にソートするには、<algorithm>ヘッダーに含まれるsort()関数と、比較用の関数オブジェクトgreater<int>()を組み合わせます。通常、sort()関数はデフォルトで昇順にソートしますが、第3引数にgreater<int>()を指定することで、降順でのソートが簡単に実現できます。

サンプルコード

#include <bits/stdc++.h>
using namespace std;
int main(){
   //vectorの宣言
   vector<int> a = { 1, 45, 54, 71, 76, 12 };
   cout << "Vector: ";
   for (int i = 0; i < a.size(); i++)
      cout << a[i] << " ";
   cout << endl;
   //降順にソート
   sort(a.begin(), a.end(), greater<int>());
   cout << "Sorted Vector in descending order: ";
   for (int i = 0; i < a.size(); i++)
      cout << a[i] << " ";
   cout << endl;
   return 0;
}

実行結果

Vector: 1 45 54 71 76 12
Sorted Vector in descending order: 76 71 54 45 12 1

コードの解説

このプログラムの重要なポイントは以下の通りです。

  • sort(a.begin(), a.end(), greater<int>()):第1引数と第2引数でソートする範囲(イテレータ)を指定し、第3引数のgreater<int>()によって降順ソートを行っています。
  • greater<int>()は、最初の引数が2番目の引数より大きい場合にtrueを返す関数オブジェクトで、これにより大きい値から順に並べ替えられます。
  • sort()関数の計算量はO(N log N)であり、非常に効率的なソートが可能です。

なお、C++17以降ではgreater<>()のようにテンプレート引数を省略して記述することもできます。また、独自の比較条件でソートしたい場合は、ラムダ式を第3引数に渡す方法も便利なので、あわせて覚えておくとよいでしょう。

  1. C#の非静的メソッドを使って1次元配列を降順に並べ替える方法

    C#では、Array.Sort()などの組み込みメソッドを使わずに、自作の非静的メソッドとネストしたforループを組み合わせることで、1次元配列を降順(大きい順)に並べ替えることができます。ここでは、その基本的な実装方法を解説します。1. 並べ替え前のリストを用意するまず、並べ替えていない整数型の配列を定義します。int[] list = {87, 45, 56, 22, 84, 65};2. ネストしたforループで並べ替える次に、関数(非静的メソッド)に渡された配列を並べ替えるために、二重のforループを使用します。外側のループで基準となる要素を決め、内側のループでそれ以降の要素と比較しな

  2. C#のArrayクラスメソッドを使って1次元配列を降順に並べ替える方法

    まず、並べ替え前の(ソートされていない)配列を用意します。 int[] list = {98, 23, 97, 36, 77}; 最初に、Sort()メソッドを使って配列を昇順にソートします。 Array.Sort(list); 続いて、Reverse()メソッドで配列を反転させることで、最終的に降順に並べ替えられた配列が得られます。 Array.Reverse(list); 以下のコードを実行して、1次元配列を降順に並べ替える動作を実際に確認してみましょう。 コード例 using System; namespace Demo {    public class MyAp