// set の使用例 // 関数オブジェクト(function object)を自作してみます // (*)関数オブジェクト: operator()関数を持つオブジェクト // unary_function, または binary_function を継承する #include <iostream> #include <string> #include <set> #include <functional> using namespace std ; class myclass { public: string szName; myclass() {} ; myclass ( const string& name ) { szName = name ; } } ; // 比較クラス用に関数オブジェクトを定義 struct lessMyClass : binary_function< myclass, myclass, bool> { bool operator( )( const myclass& ob1, const myclass& ob2 ) const { return ob1.szName < ob2.szName; } }; typedef set<myclass, lessMyClass> SetMyClass; int main () { SetMyClass setmyclass ; setmyclass.insert( myclass("spinel") ); setmyclass.insert( myclass("pyrite") ); setmyclass.insert( myclass("calcite") ); for ( SetMyClass::iterator itr = setmyclass.begin () ; itr != setmyclass.end () ; itr++ ) { cout << itr->szName << endl; } return 0 ; } /* set00.cpp のソースと比較して、分かり易いと思います。 set00.cpp では functional の less までもぐって、演算子をオーバーロード するイメージでしたが、本ソースは、setのコンストラクタで、 比較用の自作関数オブジェクトを指定するだけでOKです。 「比較はこの関数オブジェクトに任せる」。分かり易いです。 */ // end of file