From 600afcc71356d7cff5e01f4f0bd4f7c72ddd3359 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=B5=E5=B0=8F=E5=87=A1?= <2672931+whyb@users.noreply.github.com> Date: Tue, 31 Dec 2024 18:29:50 +0800 Subject: [PATCH 1/2] add simplestl std::unordered_map --- src/simplestl.h | 74 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) diff --git a/src/simplestl.h b/src/simplestl.h index 00ff4680186..be097607d27 100644 --- a/src/simplestl.h +++ b/src/simplestl.h @@ -560,6 +560,80 @@ inline string operator+(const string& str1, const string& str2) return str; } +template +class unordered_map { +public: + typedef pair value_type; + + unordered_map() : count(0) {} + + ~unordered_map() { + clear(); + } + + void insert(const value_type& value) { + for (size_t i = 0; i < data.size(); ++i) { + if (data[i].first == value.first) { + data[i].second = value.second; + return; + } + } + data.push_back(value); + count++; + } + + T& operator[](const Key& key) { + for (size_t i = 0; i < data.size(); ++i) { + if (data[i].first == key) { + return data[i].second; + } + } + data.push_back(make_pair(key, T())); + count++; + return data[count-1].second; + } + + T& at(const Key& key) { + for (size_t i = 0; i < data.size(); ++i) { + if (data[i].first == key) { + return data[i].second; + } + } + return data[0].second; //throw std::out_of_range("Key not found"); + } + + bool empty() const { + return count == 0; + } + + size_t size() const { + return count; + } + + void emplace(const Key& key, const T& value) { + insert(make_pair(key, value)); + } + + void erase(const Key& key) { + for (size_t i = 0; i < data.size(); ++i) { + if (data[i].first == key) { + data.erase(data.begin() + i); + count--; + return; + } + } + } + + void clear() { + data.clear(); + count = 0; + } + +private: + vector data; + size_t count; +}; + } // namespace std #endif // NCNN_SIMPLESTL_H From 6805cae3726749fc3938e8b43c94253462459c46 Mon Sep 17 00:00:00 2001 From: whyb Date: Tue, 31 Dec 2024 10:31:48 +0000 Subject: [PATCH 2/2] apply code-format changes --- src/simplestl.h | 61 +++++++++++++++++++++++++++++++++---------------- 1 file changed, 41 insertions(+), 20 deletions(-) diff --git a/src/simplestl.h b/src/simplestl.h index be097607d27..4d2362106a6 100644 --- a/src/simplestl.h +++ b/src/simplestl.h @@ -561,19 +561,27 @@ inline string operator+(const string& str1, const string& str2) } template -class unordered_map { +class unordered_map +{ public: typedef pair value_type; - unordered_map() : count(0) {} + unordered_map() + : count(0) + { + } - ~unordered_map() { + ~unordered_map() + { clear(); } - void insert(const value_type& value) { - for (size_t i = 0; i < data.size(); ++i) { - if (data[i].first == value.first) { + void insert(const value_type& value) + { + for (size_t i = 0; i < data.size(); ++i) + { + if (data[i].first == value.first) + { data[i].second = value.second; return; } @@ -582,41 +590,53 @@ class unordered_map { count++; } - T& operator[](const Key& key) { - for (size_t i = 0; i < data.size(); ++i) { - if (data[i].first == key) { + T& operator[](const Key& key) + { + for (size_t i = 0; i < data.size(); ++i) + { + if (data[i].first == key) + { return data[i].second; } } data.push_back(make_pair(key, T())); count++; - return data[count-1].second; + return data[count - 1].second; } - T& at(const Key& key) { - for (size_t i = 0; i < data.size(); ++i) { - if (data[i].first == key) { + T& at(const Key& key) + { + for (size_t i = 0; i < data.size(); ++i) + { + if (data[i].first == key) + { return data[i].second; } } return data[0].second; //throw std::out_of_range("Key not found"); } - bool empty() const { + bool empty() const + { return count == 0; } - size_t size() const { + size_t size() const + { return count; } - void emplace(const Key& key, const T& value) { + void emplace(const Key& key, const T& value) + { insert(make_pair(key, value)); } - void erase(const Key& key) { - for (size_t i = 0; i < data.size(); ++i) { - if (data[i].first == key) { + void erase(const Key& key) + { + for (size_t i = 0; i < data.size(); ++i) + { + if (data[i].first == key) + { data.erase(data.begin() + i); count--; return; @@ -624,7 +644,8 @@ class unordered_map { } } - void clear() { + void clear() + { data.clear(); count = 0; }