C++ STLのsort()関数で配列を並べ替える方法
はじめに
C++の標準テンプレートライブラリ(STL)に含まれるsort()関数を使うと、配列を簡単に昇順に並べ替えることができます。この記事では、sort()関数の基本的な使い方をサンプルコードとともに解説します。
例えば、配列 A = [52, 14, 85, 63, 99, 54, 21] を並べ替えると、出力は [14, 21, 52, 54, 63, 85, 99] となります。
sort()関数とは
sort()関数は、<algorithm>ヘッダーファイルで定義されている標準関数です。第1引数に並べ替え範囲の先頭を指すイテレータ(またはポインタ)、第2引数に範囲の末尾を指すイテレータを渡します。内部では高度に最適化されたイントロソートが採用されており、平均・最悪ケースともに計算量はO(n log n)と高速です。
サンプルコード
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
int arr[] = {52, 14, 85, 63, 99, 54, 21};
int n = sizeof(arr) / sizeof(arr[0]);
cout << "Array before sorting: ";
for (int i = 0; i < n; i++)
cout << arr[i] << " ";
sort(arr, arr + n);
cout << "\nArray after sorting: ";
for (int i = 0; i < n; i++)
cout << arr[i] << " ";
}
実行結果
Array before sorting: 52 14 85 63 99 54 21
Array after sorting: 14 21 52 54 63 85 99
コードの解説
「sizeof(arr) / sizeof(arr[0])」は、配列全体のバイト数を1要素分のバイト数で割ることで、配列の要素数nを求めています。
sort(arr, arr + n)は、配列の先頭arrからn個分の範囲を昇順に並べ替えます。デフォルトでは要素が小さい順(昇順)にソートされます。
降順で並べ替えるには
sort()関数の第3引数に比較関数を渡すと、並べ替えの順序を変更できます。降順にしたい場合は、<functional>ヘッダーのgreater<int>()を指定します。
sort(arr, arr + n, greater<int>());
// 結果: 99 85 63 54 52 21 14
まとめ
C++のsort()関数を使えば、自前でソートアルゴリズムを実装することなく、1行で配列を並べ替えられます。昇順・降順の切り替えも比較関数を渡すだけで簡単に行えるため、実務でも頻繁に活用される便利な関数です。
-
C++ STL(標準テンプレートライブラリ)のプライオリティキュー徹底解説
プライオリティキュー(優先度付きキュー)は、優先度を持つ要素のコレクションを格納するための抽象データ型(ADT)です。各要素は優先度に基づいて挿入・削除が行われ、最も優先度の高い要素はいつでも取り出すことができます。スタックやキュー、リストなどの線形データ構造とは異なり、プライオリティキューは要素を格納位置の順序ではなく、優先度に基づいて管理する点が大きな特徴です。C++では、STLの <queue> ヘッダで提供されており、デフォルトでは最大値が先頭に来る構造になっています。プライオリティキューがサポートする主な操作size() — プライオリティキュー内の要素数を返し、サイズを
-
C++標準テンプレートライブラリ(STL)とは?4つの主要コンポーネントを解説
C++の標準テンプレートライブラリ(STL:Standard Template Library)は、C++向けのソフトウェアライブラリであり、現在のC++標準ライブラリの多くの部分に大きな影響を与えました。STLは「アルゴリズム」「コンテナ」「関数(ファンクタ)」「イテレータ」という4つの構成要素を提供します。なお、「STL」や「Standard Template Library」という用語は、ISO 14882のC++標準規格には一切登場しません。そのため、C++標準ライブラリ全体を「STL」と呼ぶのは厳密には誤りです。STLはあくまでC++標準ライブラリの一部(サブセット)であり、両者は別