From 498747269c42723cc6fb2ab1fec181e41dbfb86d Mon Sep 17 00:00:00 2001 From: Paul Licameli Date: Tue, 9 Jan 2018 00:59:15 -0500 Subject: [PATCH] Correct test of equality of hash maps --- src/Tags.cpp | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/src/Tags.cpp b/src/Tags.cpp index 63568f844..8932a2165 100644 --- a/src/Tags.cpp +++ b/src/Tags.cpp @@ -306,19 +306,17 @@ void Tags::Clear() namespace { bool EqualMaps(const TagMap &map1, const TagMap &map2) { - for (auto it1 = map1.begin(), end1 = map1.end(), - it2 = map2.begin(), end2 = map2.end(); - it1 != end1 || it2 != end2;) { - if (it1 == end1 || it2 == end2) + // Maps are unordered, hash maps; can't just iterate in tandem and + // compare. + auto copy(map1); + for (const auto &pair : map2) { + auto iter = copy.find(pair.first); + if (iter == copy.end() || iter->second != pair.second) return false; - else if (it1->first != it2->first) - return false; - else if (it1->second != it2->second) - return false; - else - ++it1, ++it2; + copy.erase(iter); } - return true; + + return copy.empty(); } }