std :: set需要多少内存(如果有的话)来存储它的元素和std :: vector?

4 c++ stl vector std set

它必须依赖于实现,但使用std :: set是否存在任何重要的内存开销?

编辑:在我的情况下,我有一组std :: string,平均字符串长度为9个字母.

Ton*_*roy 6

A std::set实现为二叉树,因此具有左右指针的节点以及数据元素.您可以通过动态内存库函数对这些内容的分配进行舍入.所以是的 - 对于一个或三个机器字的元素,开销将作为比率/百分比"显着"(例如,2个64位指针+ a char可以轻松地向上舍入到例如32个字节...... 32倍的开销),从系统/应用程序行为的角度来看,可能是也可能不重要.如果您在意,请始终在您自己的系统上进行测量.

对于average-9-char string,总体内存使用量不仅取决于您是否使用set或者vector,而且还有多少string文本适合任何短字符串优化缓冲区(string对象内部;如果您实现提供)这样的优化),而不是需要分配更多的动态内存来存储文本.

  • @Jason Sperske根据使用模式,他可能会为内存和查找速度交换修改速度. (2认同)