来自std :: set的复合容器比std :: set本身更快?

时间:2014-06-05 09:00:55

标签: performance c++11 stl iterator stdset

我制作了一些合成容器Range,它接受​​最小/最大范围作为std::pair或一组整数作为std::set

在内部,它将输入的副本保存为void *

这个容器支持iterators,我很好奇这个容器与集合std::set之间的迭代速度有多快。

我确保在测试中使用以下策略编写每个迭代循环:

  • 没有后增量(慢)
  • 确保编译器无法完全优化循环
  • 比较同样的事情

我有以下时间: performance test

速度测试
范围的运行时间:[配对]:13.0522毫秒
范围的运行时间:[设置]:272.54 ms
std :: set的运行时间:438.239 ms
RUNTIME范围:正常循环:0.000175 ms

第一 我很惊讶,我也希望你也是,因为我的Range容器为什么要更快,因为Range的迭代器包含bot std::pair的迭代器(只是一个整数)和{ {1}}。如果std::setRange::iterator,我的Range实现会将所有运算符转发给std :: set。

第二 对此有任何意见,对此实施有效。可能有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

用dyp的评论: std :: set更快!

速度测试============================
范围的运行时间:[配对]:8.69353毫秒 范围的运行时间:[设置]:281.202 ms
std :: set的RUNTIME:220.367 ms //重新发送std :: set
RUNTIME范围:正常循环:0.000196 ms