池容器的最佳数据结构是什么?

时间:2011-08-10 10:22:42

标签: c++ stl containers connection-pooling

目前我使用STL矢量容器模板放回并获取连接。

1)在get上,返回一个连接并从池向量中“擦除()”。

2)在发布时,连接通过“push_back()”传回池中。

如果经常使用池,这可能会非常重。所以我的问题是,有没有办法通过切换到其他数据结构来提高性能?

3 个答案:

答案 0 :(得分:11)

  • 如果您只在后面追加并从后面擦除,vector就可以了。
  • 如果您从正面和背面追加和删除,但绝不从中间删除,请使用deque
  • 如果您经常需要插入和删除中间,请使用list
  • 根据您的查找和遍历要求,set可能是另一种选择。

在任何情况下,您都应该配置表现;为主容器使用typedef,以便快速切换和测试不同的选项。

可能还有其他要求,您没有告诉我们,但对于容器的选择非常重要:

  • vector和deque是随机访问容器; list和set是基于节点的。这会影响迭代器失效。
  • vector,deque和list是序列容器,而set是关联的;这会影响按值查找。

答案 1 :(得分:3)

std::vector可能是游泳池的最佳容器。 O(1)用于插入,如果您不需要维护订单,也可以删除O(1)。您可以在删除项目的情况下交换最后一项,然后缩小矢量。与其他容器相比,std::vector相当节省空间。由于CPU缓存命中率较高,内存消耗低也意味着性能更佳。

答案 2 :(得分:2)

如果您事先知道可能的最大连接数,请保留向量(请参阅vector :: reserve)。

否则使用std :: list。

最后,它还取决于您的平台以及所使用的编译器和libstdc ++的版本。