fork download
  1. #include <cmath>
  2. #include <utility>
  3. #include <iostream>
  4. #include <queue>
  5. #include <vector>
  6.  
  7. using coordinate = std::pair<double, double>;
  8.  
  9. std::ostream& operator<<(std::ostream& os, const coordinate& c)
  10. {
  11. os << "(" << c.first << "," << c.second << ")";
  12. return os;
  13. }
  14.  
  15. double absolute_value(const coordinate& c)
  16. {
  17. const double sum_of_square
  18. = c.first * c.first
  19. + c.second * c.second;
  20. return std::sqrt(sum_of_square);
  21. }
  22. class comparison_by_absolute_value {
  23. public:
  24. bool operator()(
  25. const coordinate & lhs,
  26. const coordinate & rhs) const;
  27. };
  28.  
  29. bool comparison_by_absolute_value::operator()(
  30. const coordinate & lhs,
  31. const coordinate & rhs) const
  32. {
  33. return absolute_value(lhs) < absolute_value(rhs);
  34. }
  35.  
  36. using coordinate_queue = std::priority_queue<
  37. coordinate,
  38. std::vector<coordinate>,
  39. comparison_by_absolute_value>;
  40.  
  41. int main()
  42. {
  43. coordinate_queue pq;
  44. pq.emplace(3, 1);
  45. pq.emplace(4, 1);
  46. pq.emplace(5, 9);
  47. pq.emplace(2, 6);
  48. pq.emplace(5, 3);
  49. while (!pq.empty())
  50. {
  51. std::cout << pq.top() << std::endl;
  52. pq.pop();
  53. }
  54.  
  55. return 0;
  56. }
  57.  
  58.  
Success #stdin #stdout 0s 3472KB
stdin
Standard input is empty
stdout
(5,9)
(2,6)
(5,3)
(4,1)
(3,1)