【发布时间】:2015-12-18 08:05:49
【问题描述】:
我需要一个结构,我可以在其中推送键按升序排列的键值。如果我请求一个键的值,我想获得地图内最近的更大(但不相等)键的值。
例如,我会推送 100、500 和 1000。如果我请求 750,我会得到 1000 值。如果我请求 450,我会得到 500 值。如果我请求 500,我会得到 1000 的值。这些键是动态的,在这里无法切换。
我的方法是将带有键和值的类推送到向量,但这将持续 O(n)。
有没有更好的方法/更快的方法来实现这一点,而不是通过一个键向量向前迭代并进行比较?
【问题讨论】:
-
看看
std::upper_bound。 -
@BoBTFish 他想要最近的更大应该是
upper_bound -
@Danh 这个问题对我来说并不完全清楚,但我认为如果
500和550都在场,并且他请求500,他想得到500(不是`550)。所以我想我应该指出另一种选择,然后他才能决定他真正指的是哪一种。 -
请记住,虽然
std::map是实现此功能的最简单方法,并且可能应该是您的第一次尝试,但它的缓存特性很差。如果你有严格的性能要求,你最好保持一个排序的std::vector并使用std::upper_bound。但先介绍一下!并且仅当您对map有疑问时。
标签: c++ containers