我必须使用一个已经订购的容器,我需要一个快速查找功能。
我的想法是使用一个集合来利用它的set.find
,这应该足够快,但使用set.insert
构建我的集可能会很慢,因为我已经知道元素是有序的!
对于这部分,我可以使用带有vector.push_back
的向量,但是我应该自己编写查找函数,它也会比set::find
慢... ...你建议我什么? ?
编辑:
答案 0 :(得分:2)
如果输入范围已经排序,则保证从一对迭代器构造set
为O(N),因此您可以使用它。 (参见例如http://en.cppreference.com/w/cpp/container/set/set。)
后续插入是O(log N)。
虽然如果总大小不是那么大,那么排序的vector
往往会击败其他所有内容,因为它对缓存友好。 std::binary_search
为O(log N),与set::find
相同。
std::unordered_set
并不关心你的订购,但确实给你O(1)查询(平均而言,没有保证)。
答案 1 :(得分:0)
std::vector
std::make_heap()
,push_heap()
,pop_heap()
和sort_heap()
可以帮助您尽快处理std::set
。但是,您需要手动使用std :: binary_search。