#include #include #include #include #include #include #include #include #include #include #include #include #include typedef CGAL::Simple_cartesian Kernel; typedef Kernel::Point_2 Point_2; typedef Kernel::Vector_2 Vector_2; typedef CGAL::Creator_uniform_2 Pt_creator; typedef CGAL::Random_points_in_disc_2 Random_points;; typedef CGAL::Delaunay_triangulation_2 Dt; typedef Dt::Vertex_handle Vertex_handle; typedef Dt::Finite_vertices_iterator Finite_vertices_iterator; typedef CGAL::Timer Timer; void fct(int ii, int jj) { typedef std::map SM; typedef std::unordered_map SUM; typedef boost::unordered_map BUM; Dt dt; Vector_2 v(0,0); Random_points rp( 250); std::vector points; for(int i =0; i < ii; i++){ Point_2 p = *rp++; points.push_back(p); } dt.insert(points.begin(), points.end()); std::vector vertices; Finite_vertices_iterator b = dt.finite_vertices_begin(), e = dt.finite_vertices_end(); for(; b!=e; ++b){ vertices.push_back(b); } random_shuffle(vertices.begin(), vertices.end()); Timer tsmc, tsumc, tbumc; Timer tsmq, tsumq, tbumq; for(int j=0; j point(); } tsmc.stop(); tsmq.start(); for(Vertex_handle vh : vertices){ v = v + (sm[vh] - CGAL::ORIGIN); } tsmq.stop(); } { tsumc.start(); SUM sm; for(Vertex_handle vh : vertices){ sm[vh] = vh->point(); } tsumc.stop(); tsumq.start(); for(Vertex_handle vh : vertices){ v = v + (sm[vh] - CGAL::ORIGIN); } tsumq.stop(); } { tbumc.start(); BUM sm; for(Vertex_handle vh : vertices){ sm[vh] = vh->point(); } tbumc.stop(); tbumq.start(); for(Vertex_handle vh : vertices){ v = v + (sm[vh] - CGAL::ORIGIN); } tbumq.stop(); } } std::cerr << ii << " items and queries (repeated " << jj << " times)" << std::endl; std::cerr << "std::map construction : "<< tsmc.time() << " sec." << std::endl; std::cerr << "std::map queries : "<< tsmq.time() << " sec." << std::endl; std::cerr << "std::unordered_map construction : "<< tsumc.time() << " sec." << std::endl; std::cerr << "std::unordered_map queries : "<< tsumq.time() << " sec." << std::endl; std::cerr << "boost::unordered_map construction : "<< tbumc.time() << " sec." << std::endl; std::cerr << "boost::unordered_map queries : "<< tbumq.time() << " sec.\n" << std::endl; } int main(int , char* argv[]) { fct(1000000, 10); fct(100000, 100); fct(10000, 1000); fct(1000, 10000); fct(500, 20000); fct(250, 40000); fct(100, 100000); return 0; }