可替代浮点数作为键
Alternative to floating point as key
本文关键字:浮点数 更新时间:2023-10-16
我想动态存储变量k的值和相应值的列表y1=f(k,1), y2=f(k,2)等。所有数字都是浮点数
例如,我可能有几个切割值k1=0.25和k2=0.5,然后我想存储使用每个切割值计算的数据的不同属性。
例如,我可以使用std::map< float, std::vector<float> >
。虽然这个容器似乎可以工作,但它使用浮点数作为键,如果有更好的解决方案,我希望避免这种情况。
在这种情况下,有没有被普遍接受的替代方案?(我想到的另一种选择是使用std::vector<int>
来存储k的值,然后使用std::map< unsigned int, std::vector<float> >
来存储y值,整数键是k的向量中的索引。这似乎模仿了SQL数据库的工作。但是它限制了我分析结果的容易程度。
由于std::map
使用std::less
按顺序维护其键,因此使用浮点键确实没有问题,只要:
- 您只使用映射来保持密钥的顺序;或
- 您准备使用一些不依赖于严格的键相等的策略进行查找,例如"最近键"(或"最近键,如果足够接近"),或插值;或
- 你计算键值的方式是稳定的,所以你可以依靠计算来产生一个查找值,它存在于地图中。
要实现"最接近键"或"插值值",您需要找到括号键;也就是说,最大键不大于搜索键,最小键不小于搜索键。第二个可以在std::map::lower_bound
中找到,第一个是相同的键(如果它相等),前一个键,或者不存在(如果值小于每个键)。
我看不出使用整数键有什么好处。如果不进行完全相同的计算,如何查找与浮点值对应的整数?(如果您能够保证始终使用与存储值完全相同的数字查找值,那么浮点数根本不会给您带来任何麻烦。)
std::map
要求其键类型遵守严格的弱排序属性,我非常怀疑浮点数(或双精度)不会。如果你不使用精度很高的浮点数,也许你可以把所有的浮点数乘以足够高的十次幂,这样它们就可以转换成唯一的int/long/long类型?
相关文章:
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 如何修复此错误:未定义对"距离(浮点数,浮点数,浮点数,浮点数,浮点数)"的引用
- C++浮点数据类型和字符串数据类型无法子到模板函数中
- 使用提升将数据从 PyObject 复制到浮点数 *
- 使用浮点数和双精度数的非常小数字的数学
- 使用英特尔内联函数将打包的 8 位整数乘以浮点数向量
- 如何在 c++ 中将小数点后两位数的浮点数分配给另一个浮点数
- 返回浮点数的小数位数
- txt 文件中浮点数的最大和最小值
- 为什么 std::cout 打印浮点数、双精度和长双精度到相同的小数精度?
- 将浮点数转换为无符号字符数组并打印出来
- 如何将时间字符串 (M:SS) 转换为浮点数
- 如何将浮点数(*)[6]转换为浮点**类型?
- C++将浮点数乘以分数
- 如何将浮点数转换为uint8_t?
- 将字符串转换为浮点数或整数,而无需使用内置函数(如 atoi 或 atof)
- 如何在C++(Arduino)中将浮点数组转换为字节数组
- 在数学上将浮点数四舍五入到 N 位小数
- Cython通过浮点数的最快方式,用于高频控制回路
- 复制 -nan 表示浮点数,AVX __m256 复制后显示 0