私はクラスを持っており、このクラスのオブジェクトへのポインタはに配置する必要がありますstd::set
。クラス内でコンパレータを定義したいと思います。個別のクラスが定義されているか(ファンクターと呼ばれていると思います)、またはをオーバーロードする構造が定義されているソリューションをいくつか見てきましたoperator()
。この定型コードを避け、コンパレータをクラス自体のメンバーとして定義したいと思います。これは、JavaのcompareTo()
メソッドに沿ったものです。
私のクラスは次のようなものです。
class Item {
private:
int id;
float score;
.....
public:
// Rest of the methods and setters/getters
}
スコアの高いオブジェクトへのポインタがセットの最初に配置されるようにコンパレータを定義したいと思います。2つのスコアが等しい場合は、IDが小さい方が最初に配置されます。コードは次のようになると思いますが、この部分がよくわからなかったので、訂正してください(クラス自体の中に入れてほしい):
bool operator()(const Item* a, const Item* b) {
if (a->score != b->score) return a->score > b->score;
return a->id < b->id;
}
使用法は次のようになります。
std::set<Item*> sortedItems;
Item* item = new Item();
sortedItems.insert(item);
std::set
クラス内で定義されている場合、テンプレートでコンパレータを指定する必要があるかどうかはわかりません。指定する場合は、どのようにすればよいですか。また、このコンパレータをクラス自体に追加するにはどうすればよいですか?私はSTLに不慣れであり、C++にもかなり不慣れです。ありがとう!