まず、おそらく(このようなもの)を定義する必要がありoperator<
ますFoo
...
inline bool operator< (const Foo& lhs, const Foo& rhs) {
return lhs.rank < rhs.rank;
}
これは、の友達として宣言する必要がありますFoo
。
class Foo {
public:
explicit Foo(int rank_init) : rank(rank_init) {}
friend bool operator< (const Foo&, const Foo&);
private:
int rank;
};
これで、 sを昇順で並べ替えたstd::multiset<Foo>
ままにするを
作成できます。Foo
rank
std::multiset<Foo> foo_multiset;
foo_multiset.insert(Foo(5)); // 5
foo_multiset.insert(Foo(3)); // 3, 5
foo_multiset.insert(Foo(1)); // 1, 3, 5
foo_multiset.insert(Foo(3)); // 1, 3, 3, 5
size_t erased_count(foo_multiset.erase(Foo(3))); // 1, 5 (erased_count == 2)
ただし、特定の場合にこれが「最速」のオプションになるという保証はありません。そのためにプロファイリングする必要があります。std::vector<Foo>
要素の数、挿入/消去操作の頻度、およびSTLの実装によっては、ソートがニーズに適していることがわかります。
スコットマイヤーズの効果的なSTLは、これが項目23にどのように当てはまるかを説明しています。