我有一個n
對象的集合。每個對象都有兩個數字屬性A
和B
。 我知道A
和B
上的訂單是完全相關的:obj1.A > obj2.A
當且僅當obj1.B > obj2.B
。在C++中定義和搜索關聯訂單中的集合
如果我執行的收集由A
整理一組, 我可以在O(log n)
支持以下操作:
- 插入
- 刪除
- LOWER_BOUND上
A
但屬性B
的搜索std::lower_bound
將是線性的,因爲集合不是s支持RandomAccessIterators。 我知道我可以定義自己的二叉樹實現(例如:紅黑色或AVL),這些二叉樹可以在每個節點中存儲A
和B
值。通過這種方式,我可以在所有4項操作中使用O(log n)
。
是否有一個更簡單(更高級別)的方法來有效地支持4個操作(搜索屬性,插入和刪除)?
你有權訪問C++ 14嗎? – StoryTeller
是的。 C++ 14解決方案對我來說很好。 –
看看['std :: set :: lower_bound'](http://en.cppreference.com/w/cpp/container/set/lower_bound)如果你讓你的類與'B'比較,你可能能夠得到你想要的。它可能會需要一個小的幫助類(一個包裝你將比較'B'的整數)。 – StoryTeller