首先,您可能应该operator<
为Foo
(类似这样的东西)定义...
inline bool operator< (const Foo& lhs, const Foo& rhs) {
return lhs.rank < rhs.rank;
}
需要将其声明为Foo
's 的朋友:
class Foo {
public:
explicit Foo(int rank_init) : rank(rank_init) {}
friend bool operator< (const Foo&, const Foo&);
private:
int rank;
};
现在您可以创建一个std::multiset<Foo>
保持Foo
s 升序排序的 s 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 实现,您会发现 sortedstd::vector<Foo>
更适合您的需求。
Scott Meyers 的有效 STL在第 23 项中描述了这种情况。