我有一张地图,它将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。
这样做的最佳方式是什么?
答案 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()。
它并不能完全满足您的要求,但它可以为您提供与您正在寻找的元素非常接近的元素的位置。