#include <iostream>
#include <map>
#include <tuple>
#include <vector>
struct Point2f
{
Point2f(double x, double y) : x(x), y(y) {}
double x;
double y;
};
std::ostream& operator << (std::ostream& os, const Point2f& pt)
{
return os << "[" << pt.x << ", " << pt.y << "]";
}
bool operator < (const Point2f& lhs, const Point2f& rhs)
{
return std::tie(lhs.x, lhs.y) < std::tie(rhs.x, rhs.y);
}
int main()
{
std::vector<Point2f> points_1, points_2;
points_1.push_back(Point2f(1.0, 2.0));
points_1.push_back(Point2f(2.0, 2.0));
points_1.push_back(Point2f(3.0, 2.0));
points_1.push_back(Point2f(1.0, 2.0));
points_1.push_back(Point2f(2.0, 2.0));
points_1.push_back(Point2f(3.0, 2.0));
points_1.push_back(Point2f(1.0, 2.0));
points_2.push_back(Point2f(1.0, 1.0));
points_2.push_back(Point2f(1.0, 1.0));
points_2.push_back(Point2f(1.0, 2.0));
points_2.push_back(Point2f(1.0, 1.0));
points_2.push_back(Point2f(1.0, 1.0));
points_2.push_back(Point2f(1.0, 1.0));
points_2.push_back(Point2f(1.0, 1.0));
std::vector<std::pair<Point2f, Point2f>> point_pairs;
for (size_t i = 0; i < points_1.size(); i++) {
std::cout << points_1[i] << " " << points_2[i] << std::endl;
point_pairs.push_back(std::make_pair(points_1[i], points_2[i]));
}
std::cout << "==========\n";
std::map<std::pair<Point2f, Point2f>, int> counts;
for (const auto& p : point_pairs) {
++counts[p];
}
for (const auto& p : counts) {
const auto& p1 = p.first.first;
const auto& p2 = p.first.second;
int count = p.second;
std::cout << p1 << " " << p2 << " - " << count << " Occurrence(s)\n";
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWFwPgojaW5jbHVkZSA8dHVwbGU+CiNpbmNsdWRlIDx2ZWN0b3I+CgpzdHJ1Y3QgUG9pbnQyZgp7CiAgICBQb2ludDJmKGRvdWJsZSB4LCBkb3VibGUgeSkgOiB4KHgpLCB5KHkpIHt9CiAgICAKICAgIGRvdWJsZSB4OwogICAgZG91YmxlIHk7Cn07CgoKc3RkOjpvc3RyZWFtJiBvcGVyYXRvciA8PCAoc3RkOjpvc3RyZWFtJiBvcywgY29uc3QgUG9pbnQyZiYgcHQpCnsKICAgIHJldHVybiBvcyA8PCAiWyIgPDwgcHQueCA8PCAiLCAiIDw8IHB0LnkgPDwgIl0iOwp9Cgpib29sIG9wZXJhdG9yIDwgKGNvbnN0IFBvaW50MmYmIGxocywgY29uc3QgUG9pbnQyZiYgcmhzKQp7CiAgICByZXR1cm4gc3RkOjp0aWUobGhzLngsIGxocy55KSA8IHN0ZDo6dGllKHJocy54LCByaHMueSk7Cn0KCmludCBtYWluKCkKewogICAgc3RkOjp2ZWN0b3I8UG9pbnQyZj4gcG9pbnRzXzEsIHBvaW50c18yOwogICAgCiAgICBwb2ludHNfMS5wdXNoX2JhY2soUG9pbnQyZigxLjAsIDIuMCkpOwogICAgcG9pbnRzXzEucHVzaF9iYWNrKFBvaW50MmYoMi4wLCAyLjApKTsKICAgIHBvaW50c18xLnB1c2hfYmFjayhQb2ludDJmKDMuMCwgMi4wKSk7CiAgICBwb2ludHNfMS5wdXNoX2JhY2soUG9pbnQyZigxLjAsIDIuMCkpOwogICAgcG9pbnRzXzEucHVzaF9iYWNrKFBvaW50MmYoMi4wLCAyLjApKTsKICAgIHBvaW50c18xLnB1c2hfYmFjayhQb2ludDJmKDMuMCwgMi4wKSk7CiAgICBwb2ludHNfMS5wdXNoX2JhY2soUG9pbnQyZigxLjAsIDIuMCkpOwogICAgCiAgICBwb2ludHNfMi5wdXNoX2JhY2soUG9pbnQyZigxLjAsIDEuMCkpOwogICAgcG9pbnRzXzIucHVzaF9iYWNrKFBvaW50MmYoMS4wLCAxLjApKTsKICAgIHBvaW50c18yLnB1c2hfYmFjayhQb2ludDJmKDEuMCwgMi4wKSk7CiAgICBwb2ludHNfMi5wdXNoX2JhY2soUG9pbnQyZigxLjAsIDEuMCkpOwogICAgcG9pbnRzXzIucHVzaF9iYWNrKFBvaW50MmYoMS4wLCAxLjApKTsKICAgIHBvaW50c18yLnB1c2hfYmFjayhQb2ludDJmKDEuMCwgMS4wKSk7CiAgICBwb2ludHNfMi5wdXNoX2JhY2soUG9pbnQyZigxLjAsIDEuMCkpOwoKICAgIHN0ZDo6dmVjdG9yPHN0ZDo6cGFpcjxQb2ludDJmLCBQb2ludDJmPj4gcG9pbnRfcGFpcnM7CiAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBvaW50c18xLnNpemUoKTsgaSsrKSB7CiAgICAgICAgc3RkOjpjb3V0IDw8IHBvaW50c18xW2ldIDw8ICIgIiA8PCBwb2ludHNfMltpXSA8PCBzdGQ6OmVuZGw7CiAgICAgICAgcG9pbnRfcGFpcnMucHVzaF9iYWNrKHN0ZDo6bWFrZV9wYWlyKHBvaW50c18xW2ldLCBwb2ludHNfMltpXSkpOwogICAgfQogICAgCiAgICBzdGQ6OmNvdXQgPDwgIj09PT09PT09PT1cbiI7CiAgICAKICAgIHN0ZDo6bWFwPHN0ZDo6cGFpcjxQb2ludDJmLCBQb2ludDJmPiwgaW50PiBjb3VudHM7CiAgICAKICAgIGZvciAoY29uc3QgYXV0byYgcCA6IHBvaW50X3BhaXJzKSB7CiAgICAgICAgKytjb3VudHNbcF07CiAgICB9CiAgICAKICAgIGZvciAoY29uc3QgYXV0byYgcCA6IGNvdW50cykgewogICAgICAgIGNvbnN0IGF1dG8mIHAxID0gcC5maXJzdC5maXJzdDsKICAgICAgICBjb25zdCBhdXRvJiBwMiA9IHAuZmlyc3Quc2Vjb25kOwogICAgICAgIGludCBjb3VudCA9IHAuc2Vjb25kOwogICAgICAgIHN0ZDo6Y291dCA8PCBwMSA8PCAiICIgPDwgcDIgPDwgIiAtICIgPDwgY291bnQgPDwgIiBPY2N1cnJlbmNlKHMpXG4iOwogICAgfQogICAgCn0K
[1, 2] [1, 1]
[2, 2] [1, 1]
[3, 2] [1, 2]
[1, 2] [1, 1]
[2, 2] [1, 1]
[3, 2] [1, 1]
[1, 2] [1, 1]
==========
[1, 2] [1, 1] - 3 Occurrence(s)
[2, 2] [1, 1] - 2 Occurrence(s)
[3, 2] [1, 1] - 1 Occurrence(s)
[3, 2] [1, 2] - 1 Occurrence(s)