C++ 插入数字的固定时间查找

C++ 插入数字的固定时间查找,c++,algorithm,data-structures,C++,Algorithm,Data Structures,我必须插入从0到10^9的K个数字。后来我想知道我是否插入了一个特定的数字。这里K的范围从0到10^5 插入和删除都必须在固定时间内进行。我已经看了C++ STL无序的地图。但无序映射需要两个参数。我只想插入一个数字,而不是键值对 我可以简单地使用一系列bool,比如 bool numberExists[1000000000]; 但将其初始化为false将花费大量时间。如前所述,我需要恒定时间的插入和查找 我应该使用什么数据结构 但无序映射需要两个参数。我只想插入一个数字,而不是键值对 然后您

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

插入和删除都必须在固定时间内进行。我已经看了C++ STL无序的地图。但无序映射需要两个参数。我只想插入一个数字,而不是键值对

我可以简单地使用一系列bool,比如

bool numberExists[1000000000];
但将其初始化为false将花费大量时间。如前所述,我需要恒定时间的插入和查找

我应该使用什么数据结构

但无序映射需要两个参数。我只想插入一个数字,而不是键值对

然后您应该使用:它提供固定时间查找,以及摊销固定时间插入和删除

如果您正在寻找最坏情况下的常数时间插入和查找,则需要甚至。但是,注意,遍历所有元素需要的时间是OMAX,而不是ON,这可能会更糟。

< p>您需要哈希集,而在C++中,它被实现为:unOrdEdStEng/
请注意,如果您继续添加元素,则不能保证每次添加都是恒定的,因为若达到阈值,则所有元素都将重新灰化。然而,为了简单起见,它非常接近这个目标。

您可以使用内存,而不必对其进行零初始化


这个问题本质上是重复的,为什么不使用std::vector@Shan我相信vector只支持固定时间插入而不支持查找…@PRP它是按索引进行的固定时间查找。由于您的键是索引,所以这是固定时间查找。不过记忆犹新。谁说我的钥匙会成为我的索引…?嗯,你说了?插入数字999:VAL[999]=true;。检查是否已插入编号999:IFVAL[999]。。。。但是,同样,从内存的角度来看,对于大的数字可能并不理想。@PRP这称为摊销常数时间-与无序映射相同。多元素插入:平均大小写:插入的元素数呈线性。最坏情况:N*size+1:插入的元素数乘以容器大小加one@PRP假设哈希表中的插入操作在O1中有效,除非哈希函数不正确。@Jarod42感谢您的评论-我编辑后提到了std::bitset。另外,请看一下:如果您认为它是重复的,你可能应该在这个问题下发表评论,而不是对此作出回答。