2007年09月01日

STL setのテンプレート引数にクラスを用いた実装例

#include <iostream>
#include <set>

#include <cstdlib>
#include <ctime>
using namespace std;

class Data{
public:
  int ID;
  int Score;
  Data(int ID,int Score):ID(ID),Score(Score){};

  bool operator<(const Data &d) const{
    return Score<d.Score;
  }
};

int main(void)
{
  multiset<Data> User;

  srand((unsigned)time(NULL));

  for(int i=0;i<20;i++)
    User.insert(Data(i,rand()%1000));

  for(multiset<Data>::iterator itr=User.begin();itr!=User.end();++itr)
    cout << (*itr).ID << "," << (*itr).Score << endl;
  return 0;
}

イテレータにおける前置と後置

インクリメント演算子のオーバーロードをする場合、一般的な後置の実装は変更前の値のバックアップの記述を行う。
よってSTLコンテナでイテレータをインクリメントする場合、前置で書いたほうがパフォーマンス的に宜しい。
特に非PODにおいては、コピーコンストラクタなどで例外が発生する恐れもあるので尚のこと。