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
