替代浮点作为键

时间:2015-09-09 03:37:41

标签: c++ dictionary vector key

我想动态存储变量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's。这似乎模仿了SQL数据库的作用。但它限制了我分析结果的容易程度。)

1 个答案:

答案 0 :(得分:1)

由于std::map按顺序维护其键,使用std::less,使用浮点键确实没有问题,只要:

  • 您只是使用地图来保持按键顺序;或
  • 您准备使用一些不依赖于严格键相等的策略进行查找,例如“最近键”(或“如果足够接近”则为“最近键”)或插值;或
  • 计算键值的方式是稳定的,因此您可以依靠计算来生成映射中存在的查找值。

要实现“最近键”或“插值”,您需要找到包围键;也就是说,不大于搜索关键字的最大密钥和不小于搜索关键字的最小密钥。其中第二个可以找到std::map::lower_bound,第一个是相同的键(如果它相等),前一个键,或者不存在(如果值小于每个键)。

我认为使用整数键没有任何好处。如何在不进行完全相同计算的情况下查找与浮点值对应的整数? (如果你可以保证你总是使用与你用来存储它们的数字完全相同的数字来查找值,那么浮动点根本不会让你感到悲伤。)