Exemplo n.º 1
0
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;
  }
}