恒定时间查找插入的数字

时间:2015-01-06 10:06:03

标签: c++ algorithm data-structures

我必须插入K个数字,范围从0到10 ^ 9。后来我想知道我是否插入了一个特定的号码。这里K的范围是0到10 ^ 5.

插入和删除都必须处于恒定时间。我查看了C ++ STL unordered_map。但unordered_map需要两个参数。我只想插入一个不是key-value pair的数字。

我可以简单地使用像

这样的bool数组
bool numberExists[1000000000];

但是将其初始化为假将花费大量时间。 按照说我希望不断插入和查找时间。

我应该使用哪种数据结构......?

3 个答案:

答案 0 :(得分:4)

  

但unordered_map需要两个参数。我只想插入一个不是键值对的数字。

然后你应该使用std::unordered_set<int>:它提供恒定时间查找,摊销常量时间插入和删除。

如果您正在寻找最坏情况的常量时间插入和查找,则需要std::vector<bool>甚至std::bitset<N>。但请注意,迭代其所有元素所花费的时间是O(MAX),而不是O(N),这可能会更糟糕。

答案 1 :(得分:0)

您需要 hashset ,在c ++中,它实现为:unordered_set。 (manual

请注意,如果继续添加元素,则每个add都不保证是常量,因为如果达到阈值,则完成所有元素的重新散列。但是为了简单起见,它非常接近这个目标。

答案 2 :(得分:0)

您可以使用内存而不必将其初始化为零。

这个问题基本上是Data structure that supports the following in O(1) time: initialization, insertion, deletion, finding an element, deleting all elements

的欺骗