【发布时间】:2012-04-10 23:14:04
【问题描述】:
“清除”大型 STL 容器的最快方法是什么?在我的应用程序中,我需要处理大尺寸std::map,例如,10000 个元素。
我已经测试了以下 3 种方法来清除 std::map。
- 每次需要时都创建一个新容器。
- 调用
map::clear()方法。 - 调用
map::swap()方法。
似乎::swap() 给出了最好的结果。谁能解释一下为什么会这样?可以肯定地说使用map::swap() 方法是“清除”std::map 的正确方法吗?其他 STL 容器是否也一样,例如set、vector、list 等。
m_timer_start = boost::posix_time::microsec_clock::local_time();
// test_map.clear();
test_map.swap(test_map2);
for (int i = 0; i< 30000; i++){
test_map.insert(std::pair<int, int>(i, i));
}
// std::map<int, int> test_map_new;
// for (int i = 0; i< 30000; i++){
// test_map_new.insert(std::pair<int, int>(i, i));
// }
m_timer_end = boost::posix_time::microsec_clock::local_time();
std::cout << timer_diff(m_timer_start, m_timer_end).fractional_seconds() << std::endl; // microsecond
【问题讨论】:
-
“最快”几乎总是依赖于实现。
-
这三者之间的差异有多大?如果不是很多,我会说 clear 仍然是最易读的。
-
您如何使用
std::swap以及您如何对其进行基准测试? -
swap本身肯定比clear快,但它不会释放任何空间。你确定你计算了你交换的对象的破坏? -
您应该使用更大的测试用例。 5 毫秒的差异是最小的。
标签: c++ dictionary stl std