From 6bd0cdcb1b7bc74d7073ff4a55deb87b8695a1c4 Mon Sep 17 00:00:00 2001 From: Erica Fischer Date: Thu, 9 Nov 2023 14:26:13 -0800 Subject: [PATCH] Fix multiply duplicated spikes --- polygon.cpp | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/polygon.cpp b/polygon.cpp index 2a05b76d..5420b608 100644 --- a/polygon.cpp +++ b/polygon.cpp @@ -34,7 +34,7 @@ struct point { typedef std::pair segment; void fix_opposites(std::vector &segs) { - std::map opposites; + std::multimap opposites; segment erased = std::make_pair(point(INT_MAX, INT_MAX), point(INT_MAX, INT_MAX)); for (size_t i = 0; i < segs.size(); i++) { @@ -47,11 +47,16 @@ void fix_opposites(std::vector &segs) { continue; } - auto f = opposites.find(segs[i]); - if (f != opposites.end()) { + auto f = opposites.equal_range(segs[i]); + for (; f.first != f.second; ++f.first) { + if (segs[f.first->second] == erased) { + continue; + } + segs[i] = erased; - segs[f->second] = erased; - opposites.erase(f); + segs[f.first->second] = erased; + opposites.erase(f.first); + break; } }