まずあなたはおそらく... Foo
(このようなもの)のために
Foo
年代のフレンドとして宣言する必要があります
inline bool operator< (const Foo& lhs, const Foo& rhs) {
return lhs.rank < rhs.rank;
}
operator<
を定義する必要があります。
class Foo {
public:
explicit Foo(int rank_init) : rank(rank_init) {}
friend bool operator< (const Foo&, const Foo&);
private:
int rank;
};
を今度は、Foo
を昇順でソートしたstd::multiset<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)
ただし、これが特定のケースでは「最速」オプションになることは保証されていません。それをプロファイルする必要があります。要素の数、挿入/消去操作の頻度、およびSTLの実装によっては、ソートされたstd::vector<Foo>
がニーズに適していることがわかります。
はスコット・マイヤーズEffective STLがこのアイテムのケースかもしれない方法を説明します23.
使用のstd ::マップ... –
というかのstd ::設定 - あなたは要素を変更する必要がない限り。 –
しかし、私のシナリオでは、私が注文したいオブジェクトのパラメータが同じであるいくつかのオブジェクトがある可能性があります – networkprofile