// set の使用例。 自作クラスをsetに格納する // デフォルトの less 関数オブジェクトを使用する #include <iostream> #include <string> #include <set> using namespace std ; class myclass { public: string szName; myclass() {} ; myclass ( const string& name ) { szName = name ; } } ; // functional中の less<class T>() の演算子"<"を定義する必要あり bool operator<( const myclass& ob1, const myclass& ob2 ) { return ob1.szName < ob2.szName; } // 第2引数は不要ですが、敢えて..(明示するために) typedef set< myclass, less<myclass> > 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 ; } /* ちゃんと文字列を昇順に並べ替えてくれています。 自作クラスをsetに格納したい場合は、最低でも演算子"<" を オーバーロードする必要があります。 set のソースを見れば 比較用のクラスにデフォルトで less を 使用していることが分かります。だから "<"だけでもオーバーロード しなくてはいけません(しなければコンパイルエラーです)。 */ // end of file