2012-11-22 43 views
2

我有一個集合,即類型multiset,我試圖使用upper_bound函數來查找由迭代器返回的元素的索引。通常使用矢量,如果我得到迭代器並從中減去vector.begin()以得到答案,它就會起作用。
但是,當我嘗試使用一個集合時,它會給出一個STL錯誤,在...中說「不匹配運算符 - 」(忽略STL細節)C++設置:不匹配 - 運算符

是否有一個基本原因RB-樹木和所有)。如果是這樣,任何人都可以提出一個替代這樣做呢?(我試圖解決一個編程網站問題)

謝謝!

回答

6

是的,有不同類型的迭代器operator-不支持隨機訪問的集合迭代器。

你可以使用std::distance(mySet.begin(), iter);

我認爲,對於std :: set(和multiset),這可能是一個O(log N)操作,相比之下它是恆定的向量和列表的線性時間。

您確定要將您的數據存儲在std::multiset?您可以改爲使用排序的向量。矢量速度較慢的地方是定期進行編輯,即您試圖從任何位置插入和移除元素,同時保留其排序狀態。 如果數據構建一次,然後訪問多次,排序的向量有時可能更有效。

如果數據集非常大,請考慮使用std::deque而不是std::vector,因爲deque在不需要連續內存塊時更具可擴展性。

+0

謝謝!我認爲一套將是最適合我的情況,因爲將進行大量編輯:)。 –