因此,我花了很多时间阅读各种问题、博客文章、文章等,了解不同 STL 容器在不同情况下的性能比较。
但是,我还没有为我的确切情况找到一个好的来源(3D 游戏):
我正在收集大量(肯定超过 5k,可能低于 50k)指向某个类的指针(我认为它的确切性质不相关)并希望通过一个浮点值对它们进行排序,该浮点值确定它们到某个任意位置的距离(在帧期间不会改变)。
之后,我想遍历每个存储的指针。顺序在这里很重要,因此排序。
这是伪代码中的情况:
// A: Insertion
foreach (class instance that needs sorting):
container.insert( pair(distanceOfInstance, instance) );
// B: Sorting - using the distanceOfInstance as the determining factor
container.sort();
// C: Iteration in sorted order
foreach (pair in container)
doSomethingWith(pair.instance);
整个过程(可能)在游戏中的每一帧都重复,所以这里的最佳性能有点重要。每次都必须在A之前清空容器。在C之后,什么都没有做。
我不需要的(我重复一遍,NOT)需要:
- 随机访问容器。
- 容器排序后插入新元素的能力。
目前,我认为最快的是使用向量或集合。但我不知道 - 在我的情况下 - 将元素插入向量中,然后对其进行排序,然后对每个元素进行一次迭代会更快。或者如果将元素插入集合(因此在插入期间对它们进行排序)然后迭代每个元素一次会更快。
我们还在我们的项目中将 boost 用于其他一些任务,所以如果有人知道 boost 内部更好的解决方案(或完全其他的解决方案),我非常愿意提供建议。另外,很抱歉,如果这个问题已经得到回答,我只是没有找到它:)