适用于中间插入和随机访问的体积性能顺序容器

时间:2014-03-19 12:26:55

标签: c++ containers big-o

我正在制作小型纸牌游戏,由于奇怪的游戏规则需要经常进行 中间插入,频繁随机访问。我为此使用了std :: list,就是这样 具有良好的保证金,足够快的PvsP,但现在我正在制作AI,它使用蛮力 找到一个好的举动(游戏是确定性的),他们Big-O(n)正在受伤。

现在回答我的问题;是否有一个免费的,顺序,可能是基于树的,类似STL的, 经过充分测试的容器,Big-O的中间插入和随机访问不超过log(n)?

注意:我正在寻找关联容器。

更新:我找到了一个名为AVL-Array的东西,可以满足我的需求。它满足除“经过良好测试”之外的所有要求。它给了我我希望的加速,但不幸的是,析构函数看起来很慢而且很慢。

新更新:我使用调试器(!)导致的AVL-Array所遇到的所有问题,以及 我现在已经解决了这个问题。

1 个答案:

答案 0 :(得分:0)

A"小牌游戏"听起来不太重要。所以,我的第一选择是std::vector。在中间插入所花费的时间将按照#of的次序插入时间#of elements元素的大小乘以元素的大小。我怀疑其中任何一个都是巨大的,具有数百万个元素,毫秒插入或kb元素大小的巨大含义。

尝试使用手头的容器实现,并进行性能测量。您拥有的列表可能会使随机访问性能下降,而std::vector中则为O(1)。另一方面,中间插入在std::list中可能是最快的,但如果你的向量元素是微不足道的,插入主要是一个简单的memmove并且不是很昂贵。

一般来说,如有疑问,请使用分析器。它是唯一可以告诉你编译器优化代码有多好的东西(包括其他人类)。