【发布时间】:2013-01-23 00:33:32
【问题描述】:
我需要实现一个键值数据结构,在 O(lgn) 或 O(1) 中搜索唯一的 key 并在 O( 1)。我在考虑
boost::bimap< unordered_set_of<key> ,multiset_of<value> >
请注意,我的键值数据集中没有重复键。但是,两个键可能具有相同的值。因此我使用 multiset 来存储值。
我需要经常插入/删除/更新键值对
听起来怎么样?
【问题讨论】:
-
您也可以考虑将哈希表与最大堆并行,这并不是真正的 STL 特定建议,但也许有用。
-
如果你不需要删除元素(你没有提到这个问题)一个带有
std::map/std::unordered_map的简单类并在插入时检查最大值就可以了。 @acjohnson55 的最大堆解决方案适用于您需要删除元素时。bimap做的比你想要的多,因此它有点慢,但你不必编写一个字节,你得到一个经过良好测试的解决方案,所以听起来相当不错! -
ooor,只是一个
std::map+ 一个迭代器到最后。boost::bimap可能是矫枉过正 -
@Csq 我确实需要经常删除元素。事实上,我将从最大堆顶部删除具有最大值的元素。因此,我认为您的解决方案不适合我。你怎么看?
-
@MooingDuck 为什么有点矫枉过正?
标签: c++ boost data-structures stl bimap