gpt4 book ai didi

具有浮点索引的 C++ 数组/vector

转载 作者:太空宇宙 更新时间:2023-11-04 11:37:24 24 4
gpt4 key购买 nike

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

我对这种行为不感兴趣,因为我正在寻找一种方法来以最快的方式访问对象,具体取决于 Float 键。是否可以使用 Float 索引保持数组/vector 的访问速度?

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

Map<Float, Object>做这份工作?我在 C++ 引用文档中读到 Map 访问是“对数大小”的,这对我来说吸引力不大。

谢谢 :).

编辑:

我需要将包含 X 个共享顶点的网格 M 转换为包含 X' 个非共享顶点的网格 M'。顶点索引设置在 M 中,我知道它处于 TRIANGLE 模式。

我目前的算法是:

对于 M.indexes 中的 i,i+3

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

  • 计算这些顶点的法线

  • 检查每对 {Vertex_i, Normal}(i 在 1 到 3 之间,我的 3 个顶点)我是否已经存储了这对对,并采取相应的行动

  • ...后续步骤

为了检查一对 {Vertex,Normal},我使用基于顶点位置的 Array[x][y][z],这是一个 Float,虽然我知道它不会超过 3 位精度.

最佳答案

使用 unordered_map . find方法在一般情况下具有复杂性:常量,在最坏情况下:容器大小呈线性。

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

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

关于具有浮点索引的 C++ 数组/vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22629504/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com