我std::map
用来按排序顺序存储一组数字。我希望能够在 O(1) 时间内获得小于或等于某个目标数字的数字计数器(不包括找到最大键所需的时间<= target
)。有没有办法做到这一点?
例如,假设我将以下数字(可以存在重复)(1,0,5,2,3,8)
存储为 中的键std::map
,并且我有一个target_key = 4
. 我想用来std::map
给我解决方案4
,因为数组中有 4 个数字<=4
。
我不确定是否std::map
设置为执行此操作。我唯一能想到的就是使用std::upper_bound
让我获得最大值的迭代器<=4
,然后循环遍历迭代器并总结每个键的计数,但那是 O(n) 时间。
编辑1:
请注意,可能有重复的数字
编辑2:
我错误地指出搜索需要在 O(1) 时间内完成。我知道任何排序的容器都不可能,最好的情况是 O(LogN)。当我最初说 O(1) 时,我设想已经找到了最大键 ,<= target
然后使用这个键在 O(1) 时间内找到计数。我最初也设想使用std::map
来存储键值对,其中值是键的出现次数,或者更好,但是,值是键的数量(包括重复项),即<= target
.