void compare_libraries(std::size_t data_size, const Distribution& distribution) { std::cout << "\t" << N << " dimensions, " << data_size << " objects:" << std::endl; std::vector<Point> data; std::vector<Point> targets; data.reserve(data_size); targets.reserve(data_size); for (std::size_t i = 0; i < data_size; ++i) { data.push_back(Point(distribution)); targets.push_back(Point(distribution)); } { // Nearest neighbor begin into an idle_point_multiset std::cout << "\t\tidle_point_multiset:\t" << std::flush; spatial::idle_point_multiset<0, Point> cobaye(N); cobaye.insert_rebalance(data.begin(), data.end()); utils::time_point start = utils::process_timer_now(); for (typename std::vector<Point>::const_iterator i = targets.begin(); i != targets.end(); ++i) neighbor_begin(cobaye, *i); utils::time_point stop = utils::process_timer_now(); std::cout << (stop - start) << "sec" << std::endl; } { // Nearest neighbor begin into an idle_point_multiset std::cout << "\t\tpoint_multiset:\t" << std::flush; spatial::point_multiset<0, Point> cobaye(N); cobaye.insert(data.begin(), data.end()); utils::time_point start = utils::process_timer_now(); for (typename std::vector<Point>::const_iterator i = targets.begin(); i != targets.end(); ++i) neighbor_begin(cobaye, *i); utils::time_point stop = utils::process_timer_now(); std::cout << (stop - start) << "sec" << std::endl; } { // Nearest neighbor into an KDtree std::cout << "\t\tKDtree:\t" << std::flush; KDTree::KDTree<N, Point> cobaye; cobaye.insert(data.begin(), data.end()); cobaye.optimise(); utils::time_point start = utils::process_timer_now(); for (typename std::vector<Point>::const_iterator i = targets.begin(); i != targets.end(); ++i) cobaye.find_nearest(*i); utils::time_point stop = utils::process_timer_now(); std::cout << (stop - start) << "sec" << std::endl; } }
void compare_libraries (std::size_t data_size, const Distribution& distribution) { std::cout << "\t" << N << " dimensions, " << data_size << " objects:" << std::endl; std::vector<Point> data; data.reserve(data_size); for (size_t i = 0; i < data_size; ++i) data.push_back(Point(distribution)); { // Erase into a point_multiset std::cout << "\t\tpoint_multiset:\t" << std::flush; spatial::point_multiset<N, Point> cobaye; cobaye.insert(data.begin(), data.end()); std::random_shuffle(data.begin(), data.end(), random_integer); utils::time_point start = utils::process_timer_now(); for (typename std::vector<Point>::const_iterator i = data.begin(); i != data.end(); ++i) cobaye.erase(*i); utils::time_point stop = utils::process_timer_now(); std::cout << (stop - start) << "sec" << std::endl; } { // Erase into an idle_point_multiset std::cout << "\t\tidle_point_multiset:\t" << std::flush; spatial::idle_point_multiset<N, Point> cobaye; cobaye.insert_rebalance(data.begin(), data.end()); std::random_shuffle(data.begin(), data.end(), random_integer); utils::time_point start = utils::process_timer_now(); for (typename std::vector<Point>::const_iterator i = data.begin(); i != data.end(); ++i) cobaye.erase(*i); utils::time_point stop = utils::process_timer_now(); std::cout << (stop - start) << "sec" << std::endl; } { // Insert into a KDtree std::cout << "\t\tKDtree:\t" << std::flush; KDTree::KDTree<N, Point> cobaye; cobaye.insert(data.begin(), data.end()); cobaye.optimise(); std::random_shuffle(data.begin(), data.end(), random_integer); utils::time_point start = utils::process_timer_now(); for (typename std::vector<Point>::const_iterator i = data.begin(); i != data.end(); ++i) cobaye.erase(*i); utils::time_point stop = utils::process_timer_now(); std::cout << (stop - start) << "sec" << std::endl; } }