我有一個集合,即類型multiset,我試圖使用upper_bound函數來查找由迭代器返回的元素的索引。通常使用矢量,如果我得到迭代器並從中減去vector.begin()以得到答案,它就會起作用。
但是,當我嘗試使用一個集合時,它會給出一個STL錯誤,在...中說「不匹配運算符 - 」(忽略STL細節)C++設置:不匹配 - 運算符
是否有一個基本原因RB-樹木和所有)。如果是這樣,任何人都可以提出一個替代這樣做呢?(我試圖解決一個編程網站問題)
謝謝!
我有一個集合,即類型multiset,我試圖使用upper_bound函數來查找由迭代器返回的元素的索引。通常使用矢量,如果我得到迭代器並從中減去vector.begin()以得到答案,它就會起作用。
但是,當我嘗試使用一個集合時,它會給出一個STL錯誤,在...中說「不匹配運算符 - 」(忽略STL細節)C++設置:不匹配 - 運算符
是否有一個基本原因RB-樹木和所有)。如果是這樣,任何人都可以提出一個替代這樣做呢?(我試圖解決一個編程網站問題)
謝謝!
是的,有不同類型的迭代器operator-
不支持隨機訪問的集合迭代器。
你可以使用std::distance(mySet.begin(), iter);
我認爲,對於std :: set(和multiset),這可能是一個O(log N)
操作,相比之下它是恆定的向量和列表的線性時間。
您確定要將您的數據存儲在std::multiset
?您可以改爲使用排序的向量。矢量速度較慢的地方是定期進行編輯,即您試圖從任何位置插入和移除元素,同時保留其排序狀態。 如果數據構建一次,然後訪問多次,排序的向量有時可能更有效。
如果數據集非常大,請考慮使用std::deque
而不是std::vector
,因爲deque
在不需要連續內存塊時更具可擴展性。
謝謝!我認爲一套將是最適合我的情況,因爲將進行大量編輯:)。 –