C ++ map找到最接近的键

时间:2016-01-20 09:09:43

标签: c++ dictionary

我有一张地图,它将longs映射为键,将字符串映射为Values。我需要一个方法,它在地图中搜索给定的长搜索并返回尽可能接近该值的键的值。

示例:

std::map<std::long,string> mymap = {
            { 0,5, "Value1" },
            { 1,5, "Value2" },
            { 3, "Value3" } };

string getClosestValue(long randomnumber) {
 //dont know what to do
  return string
}

当我调用这样的方法:getClosestValue(0,9)我希望方法返回“Value1”,即使“Value1”的键是0.5。我想要“Value1”而不是“Value2”,因为0,9比1.5更接近0.5。

这样做的最佳方式是什么?

2 个答案:

答案 0 :(得分:2)

你应该做的事情如下:

auto it = mymap.lower_bound(key)

使用map's lower_bound method查找已插入key的位置。

现在您需要比较it == end(key)。如果是false,则应记录密钥和值,增加it,然后再次检查密钥和值。比较这两个键&#39;到key的距离,并返回最近的值。

答案 1 :(得分:1)

查看库方法std::map::lower_bound()

它并不能完全满足您的要求,但它可以为您提供与您正在寻找的元素非常接近的元素的位置。