0
A
回答
2
std :: set這樣做。事實上,如果你不希望這種情況發生,你需要切換到multisets。
從集
因爲在一組元件是唯一的,插入操作檢查 的documentation每個插入的元件是否等效於一個元件已在 容器中,並且如果是這樣,該元件沒有插入,返回一個 迭代器到這個存在的元素(如果該函數返回一個值)。
+1
複雜度低 - std:set花費的時間與log(元素數量)成正比。使用unordered_set會平均給你一個固定的時間。 –
1
不,我不認爲堆在這個問題上有所幫助。
可能最快的方法是使用散列表。它們可以在C++ 11中或作爲unordered_set在boost中使用(unordered_multiset允許重複)。
第二種方法可能是使用二叉搜索樹,如C++ 98標準std :: set(同樣,multiset允許重複),通常由紅黑樹實現。
第三個但有限的選項是先對元素進行排序,然後刪除現在連續的重複項。只有首先添加所有元素,並且所有查找都在此之後纔可行,這是可行的。否則,你只限於前兩個選項。 C++爲你提供了std :: sort和std :: unique來使用這種方法。
關於服務表現:
- 哈希表:每個接入O(1),假設你有一個好的哈希函數。
- 平衡的二叉搜索樹:最壞情況下的每個訪問O(log n)。
- 排序+刪除重複項:對於所有n個元素O(n * log n),但可能具有比二元樹低的常數因子。
相關問題
- 1. 提高複雜的數據結構替換
- 2. 哪種數據結構最適合交換操作?
- 3. 現在哪些數據結構更好?
- 4. Python數據結構操作
- 5. 由Win32 API提供的數據結構?
- 6. 字符串數據結構支持追加,前插和搜索操作
- 7. 如何在UIViewController提供時替換CCScene?
- 8. 你應該聽說過哪些複雜的數據結構?
- 9. 提高重複GROUPBY操作
- 10. 在同一列重複一些操作
- 11. java數據結構替換文件io
- 12. 哪個數據庫操作最重?
- 13. Delphi支持哪些操作符重載?
- 14. 本地時間替代,將不會覆蓋提供的結構
- 15. 替換django結果/覆蓋操作數據
- 16. 線程化二叉樹結構在Haskell中提供了哪些優勢?
- 17. 集合操作的數據結構
- 18. 多鍵操作數據結構
- 19. 數據結構來操作位
- 20. 堆棧數據結構操作
- 21. SQL LIKE操作:追加通配符列在結果集(在SAP HANA數據庫)
- 22. 過載[]複雜數據結構的C++操作符
- 23. 用不同的結構替換結構並保留一些值
- 24. 加入操作重複
- 25. 在線提供哪些組件市場?
- 26. 何時使用哪種數據結構?
- 27. 哪種數據結構最能代表這些數據?
- 28. 監視文件的追加並在追加完成後執行一些操作
- 29. 的fread()操作補給錯誤數據轉換成結構
- 30. 無法恢復「替換」操作
一個修改後的哈希表將適用於此。 –