第二点是因为有些容器(比如 A)会浪费时间复制周围的内容,类型越大,开销就越大。问题是,与另一个集装箱 B 相比,小型集装箱 A 可能赢过 B,大型集装箱 A 可能输。
第三点和第二点是一样的,除了它是成本乘以某个加权因子。
第4点是一个大 O 和缓存问题混合在一起的问题。对于少数类型(比如 map和 vector,因为它们的缓存位置很好,但是 map会破坏内存) ,一些低复杂度容器的性能大大优于低复杂度容器。然后在某个交叉点,它们会丢失,因为包含的总体大小开始“泄漏”到主内存并导致缓存丢失,再加上渐近复杂性可以开始感觉到的事实。
Point 5 is about compilers being able to elide stuff that are empty or trivial at compile time. This can optimize greatly some operations because the containers are templated, therefore each type will have its own performance profile.
第6点与第5点相同,POD 可以从拷贝构造只是 memcpy这一事实中受益,并且一些容器可以为这些情况具有特定的实现,使用部分模板专门化或 SFINAE 根据 T 的特征选择算法。
关于平面地图
显然,平面映射是一个有序的向量包装器,就像 Loki AssocVector 一样,但是通过 C + + 11附带的一些补充现代化,利用 move 语义来加速单个元素的插入和删除。
I have checked the implementation, there is no such thing as a deferred sort implemented in the flat maps here. Each insertion sorts on the fly, therefore this benchmark exhibits the asymptotic tendencies:
Map: O (N * log (N))
散列表: O (N)
矢量图和平面图: O (N * N) < br >