【发布时间】:2015-08-12 17:55:54
【问题描述】:
我需要将lowerBound 和upperBound 之间的值映射到某个值。
说明性示例:
例如,假设我有用户订阅的 GPS 系统。该系统能够为我提供用户与某个点的距离。根据用户的距离,我想为他们分配一个 ID。
因此用户远离
-
1到100得到ID: 8.4 -
101到200得到ID: 7.2 -
201到300得到ID: 3.6 -
401到600得到ID: 4.1
等等……
我的方法:
所以我做了什么,我通过如下初始化创建了一个std::map:
std::map<int, double> distanceToIdMap;
distanceToIdMap =
{
{100, 8.4},
{200, 7.2},
{300, 3.6},
};
然后我使用此代码获取给定距离的 ID:
double roundUpToHundred = std::ceil(realDistance / 100.0) * 100;
double powerForDistance = distanceToIdMap.at(roundUpToHundred);
但是,对于401 到600 的距离,我的方法失效了,因为对于400+ 的距离,我得到了500 的值,因为我没有进入该值地图。当然,简单的解决方案是将500 的条目添加到distanceToIdMap,但这不是我想要处理这个问题的方式。
我想要一张带有{(lowerbound, upperbound) , correspondingID} 结构的地图,这样我就可以解决 ID 覆盖距离超过 100m 的情况。并且给定的可以检查lowerBound realDistance upperBound 然后提供ID。
【问题讨论】:
-
您想要映射中的漏洞吗?如果不是,则不必为每个范围提供开头和结尾,结尾应等于下一个范围的开头。