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の鉄則

Effective STL―STLを効果的に使いこなす50の鉄則

  • 作者: スコットメイヤーズ,Scott Meyers,細谷昭
  • 出版社/メーカー: ピアソンエデュケーション
  • 発売日: 2002/01
  • メディア: 単行本
  • 購入: 9人 クリック: 155回
  • この商品を含むブログ (95件) を見る