RT,闲着没事 (其实是摸鱼),到 P1177 测试了一下各大排序函数/容器的速度,结果如下:
函数/容器 | 耗时(毫秒) | 占用内存 | 按耗时排名 |
---|
sort | 152 | 1020 KB | 第 2 |
priority_queue | 392 | 1.24 MB | 第 5 |
multiset | 375 | 5.23 MB | 第 4 |
qsort | 135 | 1.26 MB | 第 1 |
网上抄的归并排序 | 160 | 1.54 MB | 第 3 |
令人意外的是,没有任何优化的快排函数qsort
是最快的。
然而,我实在是无聊 (摸鱼停不下来),就开了 O2 优化:
函数/容器 | 耗时(毫秒) | 占用内存 | 按耗时排名 |
---|
sort | 120 | 1008 KB | 第 1 |
priority_queue | 134 | 1.24 MB | 第 4 |
multiset | 195 | 5.25 MB | 第 5 |
qsort | 126 | 1.30 MB | 第 2 |
网上抄的归并排序 | 130 | 1.56 MB | 第 3 |
这时, STL 的函数/容器速度得到了极大的提升。如priority_queue
,在没有进行 O2 优化之前,用时为 392 毫秒;但在进行了 O2 优化之后,用时仅为 134 毫秒,提高了一倍不止!
现在这个蒟蒻有个问题,bdfs 无果,望各位巨佬解答:
-
为什么 O2 优化对 STL 的容器/算法的用时优化如此明显?
-
除sort
和priority_queue
之外,其他函数/容器的占用空间都有提高,除去评测机波动,是否可能与开启 O2 优化有关?如果有可能,原因是?