我今天注意到我可以给C ++ Vector或Array一个Float值作为索引。
(例如tab[0.5f]
)
此Float值将转换为Int值,然后给出与tab[0]
相同的结果。
这个行为对我来说并不感兴趣,因为我正在寻找一种方法以尽可能快的方式访问Object,具体取决于Float键。 是否可以使用Float索引保持数组/向量的访问速度?
我知道我的密钥会出现不准确的问题,但我希望我的Float值最多能保持3位精度。
Map<Float, Object>
能完成这项工作吗?我已经阅读了C ++参考文档,认为Map访问的大小是“对数”,这对我来说不太有吸引力。
谢谢你:)。
编辑:
我需要将包含X个共享顶点的网格M转换为包含X'个NON共享顶点的网格M'。 顶点索引在M中设置,我知道它在TRIANGLE模式下。
我目前的算法是:
对于我在M.indexes,i + 3
取3个索引,并推导出它们指向的顶点(得到三角形的三个)
计算这些顶点的法线
检查每对夫妇{Vertex_i,正常}(我在1到3之间,我的3转),如果我已经存储了这对夫妇,并采取相应行动
......后续步骤
要检查这对夫妇{Vertex,Normal},我使用一个数组[x] [y] [z]基于顶点的位置,这是一个浮点数,虽然我知道它不会超过3digits精度
答案 0 :(得分:1)
使用unordered_map。 find
方法在平均情况下具有复杂性:常量,在最坏的情况下:容器大小为线性。
注意:由于您愿意使用数组,我假设您对订购的容器不感兴趣
有人说,无论如何,性能取决于输入(网格大小)及其特征,选择最佳解决方案的唯一方法是实现任何合理的基准和基准互相攻击。在许多情况下,由于实现细节/内在函数,理论复杂性无关紧要。我的意思是即使有人说std::vector<std::pair<float, mapped_value>>
在你的情况下表现更好,我也必须做一些测试以证明他是对/错