C/C++ STL sort
C/C++ ソート
STL algorithm sort
ソートテストで使用した関数サンプル
※このサンプルは、main_sort.cpp をメインとして分割(分割コンパイル)された一部。メイン、ヘッダー、共通関数等は、分割コンパイルの頁を参照。
sub_sort_std.cpp
//#include <iostream> //#include <time.h> //#include <string> #include <vector> #include <algorithm> #include <functional> // プレディケート less<Type>() greater<Type>() using namespace std; #include "main_sort.h" // ----------------------------------------- // ソート関数 // ----------------------------------------- /***************************** std::sort 1,2 *****************************/ void ssort1(vector < int > & v) { // 参考:1.8120 // dsp_arr(&v[0], (int)v.size()); // ---------------------------- sort(v.begin(), v.end()); // 昇順 less<int>() // sort(v.begin(), v.end(), greater<int>()); // 降順 greater<int>() // ---------------------------- // dsp_arr(&v[0], (int)v.size()); } void ssort2(vector < int > & v) { // 参考:1.4420 // dsp_arr(&v[0], (int)v.size()); // ---------------------------- sort(v.begin(), v.end(), asc1_cmp); // 昇順 // sort(v.begin(), v.end(), des1_cmp); // 降順 // ---------------------------- // dsp_arr(&v[0], (int)v.size()); } void ssort3(vector < int > & v) { // 参考:1.5730 // dsp_arr(&v[0], (int)v.size()); // ---------------------------- sort(v.begin(), v.end(), asc2_cmp()); // 昇順 // sort(v.begin(), v.end(), des2_cmp()); // 降順 // ---------------------------- // dsp_arr(&v[0], (int)v.size()); }※アルゴリズムは qsort 非安定ソート。処理速度もそれほど速い訳ではない様だ。
▲上へ [ 編集 ]
algorithm std::sort()
C++ STL 利用で昇順、逆順程度の簡単なソートなら容易に利用可能。但し「構造体メンバで並べ替え」などをしようとすると突如ハイレベルになる。
(operator 何チャラの習得も必要:現在意味不明でちんぷんかんぷん!)
また、何気なく無視していた「テンプレート:template」の知識も必要。
(template は、突っ込まなければ案外判り易い)
sort() は、STL #include <algorithm> で利用可能。Win32 でも問題なく(当然だが...)利用可能。
<vector> などの STL 専用と思い込んでたがそうではないらしく、普通の配列でも利用できる。
関数プロトタイプ(想像版)
※明確に判らないので、想像(テキトー)です。
???? sort(配列先頭アドレス, 配列の終了(最終)アドレス, 並び順);※内容非保証!
sample: Win32 Console Application(project) に作成した sort.cpp サンプル
// Win32 Sort.cpp #include <iostream> #include <algorithm> // 汎用アルゴリズム利用 void main(void) { int arrTbl[50] = {126,123,130,…}; sort(arrTbl, arrTbl+50); // 第2パラメータまではルンルン気分で利用可♪ } // qsort に比べ非常にシンプル。※project が win32 でも当然動作する。(C++標準テンプレートライブラリ::STL)
※list 出力では、なにやら bug があるらしい。(多分、同値の出現順が不規則?)
※上記追記。<list> に対して std::sort は使えない。std::sort はランダムアクセスイテレータ(要するにランダムアクセス可能なデータ構造)を使用する。<list> は基本的に ランダムアクセスが出来ないデータ構造。
※<list> で sort をする場合 <list> のメンバ関数の sort を明示的に使用する。
sample 1-2
〜 省略 〜 #include <algorithm> // 追加 // using namespace std; // 必要に応じ追加 void main() { const int arr_elements = 10; // 配列要素数 double arr_tbl[arr_elements]; // 配列の作成 // □テストデータ代入(関数呼出) testArrData(arr_tbl, arr_elements); // □配列要素を表示 std::cout << "ソート前:"; for (int i=0; i<arr_elements; i++) { printf("%3.0f ", arr_tbl[i]); } std::cout << std::endl; // ■ソート std::sort(arr_tbl, arr_tbl+arr_elements); // ■ソート済み配列要素を表示 std::cout << "ソート後:"; for (int i=0; i<arr_elements; i++) { printf("%3.0f ", arr_tbl[i]); } std::cout << std::endl; } 〜 省略 〜 srand((unsigned)(time(NULL)+getpid())); // 有効 // srand(1); // 無効 〜 省略 〜※vector 等でなくとも並べ替えが可能。
表示サンプル
ソート前: 11 87 8 30 95 42 90 26 56 10 ソート後: 8 10 11 26 30 42 56 87 90 95 続行するには何かキーを押してください . . .※非常に簡単。
▲上へ [ 編集 ]
リンク
内部リンク
- C/C++ C++/CLI C# 関連
- VC++ 2005 Express のインストール
- C/C++ の簡単なプログラム例
- C/C++ ソート(並べ替え)
- C/C++ テストの実行
- C/C++ STL(Standard Template Library)
- 変数・定数
- プログラムの分割/ダイナミックリンクライブラリ など
- その他
- C/C++ その他::書式文字/ESC code など
- VB2005リファレンス(覚え書き)
- SQL文:SQLステートメント
- VBA(VisualBasic for Applications)
外部リンク
- 現在ありません
▲上へ
2008年07月21日(月) 15:30:13 Modified by cafeboy1