【问题标题】:How to return the greatest key strictly less than the given key in a std::multimap?如何在std :: multimap中返回严格小于给定键的最大键?
【发布时间】:2011-05-24 16:16:03
【问题描述】:

multimap 提供lower_boundupper_bound 方法。两者都可以将迭代器返回到键大于期望值的值,lower_bound 可能产生完全期望的值。

现在我想要一个值的迭代器,其中键严格 less 请求。如果它是map 而不是multimap,那么实现起来相对简单,如下所述: Returning the greatest key strictly less than the given key in a C++ Map。 但在multimap 中,不保证递减迭代器使其指向严格更小的键。所以我需要反复递减,直到找到一个更小的键。不是特别好。

有没有更优雅的方式来做到这一点?

键通常是浮点数。


我很抱歉,事实证明您 可以 实际上只需一次减量即可。我只是把它错误地放在我的程序中,那是真正的错误。

【问题讨论】:

    标签: c++ stl multimap lower-bound


    【解决方案1】:

    AFAIK,lower/upper_bound 会将迭代器返回到这个值的第一个元素,所以你可以减少它

    【讨论】:

    • upper_bound 返回一个指向 next 值的第一个元素的迭代器,因此递减会给出一个指向参数实例(如果存在)的迭代器。
    【解决方案2】:

    lower_bound 指向大于或等于参数(或end)的最小元素。因此,将其递减一次即可获得所需的元素(如果存在)。

    【讨论】:

    • 我是这么认为的,它在map 中确实有效,但似乎不适用于multimap。除非错误确实出在其他地方,否则让我再检查一次...
    • 你确定你没有遇到浮点舍入问题,你认为你应该有相同的浮点数(也就是说,多个键具有相同的值),但你的键实际上是相差很小的百分比?
    • 这确实似乎是另一个问题,但它肯定与 multimap 及其 lower_bound 方法有关。我仍然不确定。
    猜你喜欢
    • 2010-10-06
    • 2019-07-10
    • 1970-01-01
    • 1970-01-01
    • 2022-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多