我有一个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