【发布时间】:2015-02-09 07:43:24
【问题描述】:
我需要创建一个将长度链接到时间间隔的查找表(两者都是双精度数据类型)。键在插入时线性递增,因此它已经被排序(也许 unordered_map 会更好?)。
我正在寻找一种方法来找到与提供的当前长度最匹配的密钥以获取时间值,或者更好地找到围绕长度的两个密钥(给定密钥在它们之间),这样我就可以找到两个时间值之间的插值。
我还需要尽可能好的性能,因为它会被实时调用。
编辑:我宁愿以下是对下面第一个答案的评论,但格式很难阅读。
我尝试执行以下操作,但它似乎返回相同的迭代器 (5.6):
std::map<double, double> map;
map.insert(std::pair<double, double>(0.123, 0.1));
map.insert(std::pair<double, double>(2.5, 0.4));
map.insert(std::pair<double, double>(5.6, 0.8));
std::map<double, double>::iterator low, high;
double pos = 3.0;
low = map.lower_bound(pos);
high = map.upper_bound(pos);
我如何获得“低”以指向最后一个元素
编辑 2: 愚蠢的我,'低-'会做到这一点,前提是它不是第一个元素。
到达那里:)
【问题讨论】:
-
一些附加信息可能会有所帮助。到目前为止我得到的是有一个函数 l = f(t)。及其逆 t = f^-1(l)。您需要从一些数据点估计该函数并对其进行插值,对吗?而不是查找表,也许一些不断更新的近似函数会更好地为您服务。
-
如果地图中只有几个条目(比如少于 5 个),线性搜索通常比一开始使用地图要快。如果您有更多条目,则可以使用等距时间值“采样”您的查找表条目。然后,您无需搜索,但可以计算 LUT 中正确条目的索引。
标签: c++