代码之家  ›  专栏  ›  技术社区  ›  Steven Behnke

std::map中的下一个值

  •  3
  • Steven Behnke  · 技术社区  · 15 年前

    我有一个 std::map<std::string, float> 所以我可以根据名称快速查找浮点值,但现在我有一种情况需要在列表中查找下一个浮点值,就像它是按数字排序的一样。据我所知,我不能只使用迭代器,因为映射是键排序的。因此,如果我的集合包含:

    std::pair<"One", 1.0>
    std::pair<"Two", 2.0>
    std::pair<"Three", 3.0>
    std::pair<"Four", 4.0>
    std::pair<"Five", 5.0>
    

    如果我想在“三”之后找到下一个值,那么最有效的方法是什么?在这种情况下,预期输出为4.0。我可以遍历整个列表,并将max值与当前的next值一起存储。这是最好的方法吗?

    2 回复  |  直到 15 年前
        1
  •  6
  •   Jerry Coffin    15 年前

    你可能想用 Boost::bimap 而不是普通的地图——它非常直接地提供了这种功能。

        2
  •  1
  •   Mike Seymour    15 年前

    如果你真的不能使用Boost,那么你可以在地图旁边保留一组单独的浮动(非常小心地保持它们的同步)。然后你可以通过两个查找找到你想要的:

    set<float>::const_iterator found = set.find(map["Three"]);
    ++found;
    assert(*found == 4.0);