STLのソート用比較関数を置き換える
STLを使うと、けっこういろいろ便利。
というのは分かってはいるのだけど、たまにしか使わないと、その書き方そのものとかを忘れてしまっていて、何が便利だったのかと途方にくれることもある。ということが何回かあったので、使うたびに簡単なサンプルに落としてメモしておくことにする。こうすれば後でググれるしね。
以下はvectorでsortをするサンプルであり、sortの比較関数をクラスオリジナルのものに置き換えるサンプルでもある。
#include <iostream> #include <vector> #include <algorithm> using namespace std; class CA{ public: int mValue; CA( int a=0 ) : mValue(a) {} ~CA(){} static int sort_func( CA& a, CA& b ){ return (a.mValue < b.mValue); } }; int main() { CA aA0( 2007 ); CA aA1( 625 ); CA aA2( 1975 ); vector<CA> aAList; aAList.push_back( aA0 ); aAList.push_back( aA1 ); aAList.push_back( aA2 ); cout << "before sort" << endl; { // テスト出力.--------- vector<CA>::iterator iA = aAList.begin(); for( ; iA != aAList.end(); iA++ ){ cout << " " << iA->mValue << endl; } } // -------------------- cout << "after sort" << endl; sort( aAList.begin(), aAList.end(), CA::sort_func ); { // テスト出力.--------- vector<CA>::iterator iA = aAList.begin(); for( ; iA != aAList.end(); iA++ ){ cout << " " << iA->mValue << endl; } } // -------------------- }
実行すると以下のように出力されるはず。
before sort 2007 625 1975 after sort 625 1975 2007
分かってしまえば簡単。
STLの本を1冊も持っていないのもダメかもしれない。今度本屋に行ったときにでもぺらぺらめくってみようかな。
Effective STL―STLを効果的に使いこなす50の鉄則
- 作者: スコットメイヤーズ,Scott Meyers,細谷昭
- 出版社/メーカー: ピアソンエデュケーション
- 発売日: 2002/01
- メディア: 単行本
- 購入: 9人 クリック: 155回
- この商品を含むブログ (95件) を見る