我正在制作小型纸牌游戏,由于奇怪的游戏规则需要经常进行 中间插入,频繁随机访问。我为此使用了std :: list,就是这样 具有良好的保证金,足够快的PvsP,但现在我正在制作AI,它使用蛮力 找到一个好的举动(游戏是确定性的),他们Big-O(n)正在受伤。
现在回答我的问题;是否有一个免费的,顺序,可能是基于树的,类似STL的, 经过充分测试的容器,Big-O的中间插入和随机访问不超过log(n)?
注意:我不正在寻找关联容器。
更新:我找到了一个名为AVL-Array
的东西,可以满足我的需求。它满足除“经过良好测试”之外的所有要求。它给了我我希望的加速,但不幸的是,析构函数看起来很慢而且很慢。
新更新:我使用调试器(!)导致的AVL-Array
所遇到的所有问题,以及
我现在已经解决了这个问题。
答案 0 :(得分:0)
A"小牌游戏"听起来不太重要。所以,我的第一选择是std::vector
。在中间插入所花费的时间将按照#of的次序插入时间#of elements元素的大小乘以元素的大小。我怀疑其中任何一个都是巨大的,具有数百万个元素,毫秒插入或kb元素大小的巨大含义。
尝试使用手头的容器实现,并进行性能测量。您拥有的列表可能会使随机访问性能下降,而std::vector
中则为O(1)。另一方面,中间插入在std::list
中可能是最快的,但如果你的向量元素是微不足道的,插入主要是一个简单的memmove并且不是很昂贵。
一般来说,如有疑问,请使用分析器。它是唯一可以告诉你编译器优化代码有多好的东西(包括其他人类)。