point1.cpp 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. // Copyright 2006-2009 Daniel James.
  2. // Distributed under the Boost Software License, Version 1.0. (See accompanying
  3. // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
  4. #include <boost/unordered_set.hpp>
  5. #include <boost/core/lightweight_test.hpp>
  6. //[point_example1
  7. struct point {
  8. int x;
  9. int y;
  10. };
  11. bool operator==(point const& p1, point const& p2)
  12. {
  13. return p1.x == p2.x && p1.y == p2.y;
  14. }
  15. struct point_hash
  16. {
  17. std::size_t operator()(point const& p) const
  18. {
  19. std::size_t seed = 0;
  20. boost::hash_combine(seed, p.x);
  21. boost::hash_combine(seed, p.y);
  22. return seed;
  23. }
  24. };
  25. boost::unordered_multiset<point, point_hash> points;
  26. //]
  27. int main() {
  28. point x[] = {{1,2}, {3,4}, {1,5}, {1,2}};
  29. for(int i = 0; i < sizeof(x) / sizeof(point); ++i)
  30. points.insert(x[i]);
  31. BOOST_TEST(points.count(x[0]) == 2);
  32. BOOST_TEST(points.count(x[1]) == 1);
  33. point y = {10, 2};
  34. BOOST_TEST(points.count(y) == 0);
  35. return boost::report_errors();
  36. }