首先你應該定義爲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;
};
現在您可以創建一個std::multiset<Foo>
,這將使Foo
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實現,您可以發現排序的std::vector<Foo>
更適合您的需求。
斯科特邁爾斯Effective STL介紹,這可能是在選項的情況下23
使用std ::地圖... – 2012-04-10 22:31:57
或者說的std ::設置 - 除非你需要改變的元素。 – 2012-04-10 22:52:00
雖然地圖需要一個唯一的鍵,但在我的場景中,可能有幾個對象我要排列的對象的參數是相同的 – networkprofile 2012-04-11 00:35:37