带有浮点索引的c++数组/向量

C++ array/vector with a float index

本文关键字:c++ 数组 向量 索引      更新时间:2023-10-16

我今天注意到我可以给一个c++ Vector或Array一个Float值作为索引。(例如tab[0.5f])这个Float值将被转换成Int值,然后给出与tab[0]相同的结果。

这种行为对我来说并不有趣,因为我正在寻找一种方法来以最快的方式访问对象,这取决于Float键。是否有可能保持访问速度的数组/矢量,与Float索引?

我知道我的键会有一个不准确的问题,但我希望我的Float值保持最大3位的精度。

一个Map<Float, Object>可以做这项工作吗?我在c++参考文档中读到Map访问是"对数大小",这对我来说不太有吸引力。

谢谢你:)。

编辑:

我需要将包含X个数共享顶点的网格M转换为包含X个数非共享顶点的网格M。顶点的索引是在M中设置的,我知道它是三角形模式。

我当前的算法是:

for i in M.indexes, i+3

  • 取3个索引,并推导它们指向的顶点(得到三角形的3个顶点)

  • 计算这些顶点的法线

  • 检查,对于每一对{Vertex_i, Normal} (i之间1和3,我的3个顶点),如果我已经有这对夫妇存储,并采取相应的行动

  • …下一步

检查一对{顶点,正常},我使用数组[x][y][z]基于顶点的位置,这是一个浮点数,虽然我知道它不会超过3位数的精度。

使用unordered_map。find方法的复杂度在平均情况下为常数,在最坏情况下为容器大小线性。

注意:既然您愿意使用数组,我假设您对使用有序容器不感兴趣

也就是说,在任何情况下,性能取决于输入(网格大小)及其特征,选择最佳解决方案的唯一方法是实现任何合理的并相互基准测试。在许多情况下,由于实现的特殊性/内在性,理论复杂性是无关紧要的。我的意思是,即使有人告诉std::vector<std::pair<float, mapped_value>>在你的情况下会表现得更好,我也必须做一些测试来证明他是对的/错的