From 3e5177d375404c913cab5f1e4b15d442b2e93b19 Mon Sep 17 00:00:00 2001 From: EnderIce2 Date: Thu, 13 Jun 2024 07:38:51 +0300 Subject: [PATCH] Fix broken iterator for unordered_map --- include_std/unordered_map | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/include_std/unordered_map b/include_std/unordered_map index 0e8c52e..0c8600a 100644 --- a/include_std/unordered_map +++ b/include_std/unordered_map @@ -418,32 +418,38 @@ namespace std iterator begin() noexcept { - return iterator(buckets, buckets.begin(), buckets.front().begin()); + auto it = buckets.begin(); + while (it != buckets.end() && it->empty()) + ++it; + return iterator(buckets, it, it == buckets.end() ? typename node_type::iterator() : it->begin()); } const_iterator begin() const noexcept { - return const_iterator(buckets, buckets.begin(), buckets.front().begin()); + auto it = buckets.begin(); + while (it != buckets.end() && it->empty()) + ++it; + return const_iterator(buckets, it, it == buckets.end() ? typename node_type::const_iterator() : it->begin()); } const_iterator cbegin() const noexcept { - return const_iterator(buckets, buckets.begin(), buckets.front().begin()); + return begin(); } iterator end() noexcept { - return iterator(buckets, buckets.end(), buckets.back().end()); + return iterator(buckets, buckets.end(), typename node_type::iterator()); } const_iterator end() const noexcept { - return const_iterator(buckets, buckets.end(), buckets.back().end()); + return const_iterator(buckets, buckets.end(), typename node_type::const_iterator()); } const_iterator cend() const noexcept { - return const_iterator(buckets, buckets.end(), buckets.back().end()); + return end(); } #pragma endregion Iterators