std::qsort
提供: cppreference.com
ヘッダ <cstdlib> で定義 | ||
void qsort(void*ptr, std::size_t count, std::size_t size, /*compare-pred*/* comp ); void qsort(void*ptr, std::size_t count, std::size_t size, /*c-compare-pred*/* comp ); | (1) | |
extern"C++"using/*compare-pred*/=int(constvoid*, constvoid*);// exposition-only extern"C"using/*c-compare-pred*/=int(constvoid*, constvoid*);// exposition-only | (2) | |
指定された ptr
の指す配列を昇順にソートします。 配列は size
バイトの要素を count
個持ちます。 comp
の指す関数はオブジェクトの比較のために使用されます。
comp
が2つの要素を同等であると示した場合、それらの順序は未規定です。
目次 |
[編集]引数
ptr | - | ソートする配列を指すポインタ |
count | - | 配列の要素数 |
size | - | 配列の各要素のバイト単位のサイズ |
comp | - | 第1引数が第2引数より小さい場合は負の整数値、第1引数が第2引数より大きい場合は正の整数値、第1引数が第2引数と等しい場合はゼロを返す比較関数。 比較関数のシグネチャは以下と同等であるべきです。 int cmp(constvoid*a, constvoid*b); 関数は渡されたオブジェクトを変更してはならず、同じオブジェクトに対してはその配列内の位置にかかわらず一貫した結果を返さなければなりません。 |
[編集]戻り値
(なし)
[編集]ノート
その名前にもかかわらず、 C++、 C および POSIX 標準はこの関数がクイックソートを用いて実装されることも、計算量や安定性のいかなる保証も、要求していません。
配列の要素の型は TrivialType
でなければならず、そうでなければ動作は未定義です。
引数 comp
の型が異なるため (言語リンケージは型の一部です)、 C++ 標準ライブラリが提供する2つのオーバーロードは異なります。
[編集]例
以下のコードは qsort()
を使用して整数の配列をソートします。
Run this code
#include <iostream>#include <cstdlib>#include <climits> int main(){int a[]={-2, 99, 0, -743, 2, INT_MIN, 4};constexprstd::size_t size = sizeof a / sizeof *a; std::qsort(a, size, sizeof *a, [](constvoid* a, constvoid* b){int arg1 =*static_cast<constint*>(a);int arg2 =*static_cast<constint*>(b); if(arg1 < arg2)return-1;if(arg1 > arg2)return1;return0; // return (arg1 > arg2) - (arg1 < arg2); // possible shortcut// return arg1 - arg2; // erroneous shortcut (fails if INT_MIN is present)}); for(int ai : a)std::cout<< ai <<' ';}
出力:
-2147483648 -743 -2 0 2 4 99
[編集]関連項目
不特定な型の要素を指定の配列から探します (関数) | |
指定範囲を昇順にソートします (関数テンプレート) | |
(C++11) | 型がトリビアルかどうか調べます (クラステンプレート) |
qsort の C言語リファレンス |