diff options
author | Shauren <shauren.trinity@gmail.com> | 2025-08-15 12:37:47 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2025-08-15 13:08:23 +0200 |
commit | 578e7c3dabcc54f302069e1bf86dace3f62ec00e (patch) | |
tree | c5fbe9fecb2d4a59e6da227b00a11b39e388eaff | |
parent | 611527b32f70d22e11ad05446810034c0bcd91d1 (diff) |
Core/Utils: Added .contains member function to FlatSet
(cherry picked from commit a27e3a52a0cdfae8cf5cbb787e944f4f76319f26)
-rw-r--r-- | src/common/Containers/FlatSet.h | 31 |
1 files changed, 16 insertions, 15 deletions
diff --git a/src/common/Containers/FlatSet.h b/src/common/Containers/FlatSet.h index 346e5c2556b..e2ffd2ed75c 100644 --- a/src/common/Containers/FlatSet.h +++ b/src/common/Containers/FlatSet.h @@ -39,11 +39,17 @@ public: auto end() { return _storage.end(); } auto end() const { return _storage.end(); } + bool contains(Key const& value) const + { + return std::binary_search(this->begin(), this->end(), value, Compare()); + } + auto find(Key const& value) const { + auto compare = Compare(); auto end = this->end(); - auto itr = std::lower_bound(this->begin(), end, value, Compare()); - if (itr != end && Compare()(value, *itr)) + auto itr = std::lower_bound(this->begin(), end, value, compare); + if (itr != end && compare(value, *itr)) itr = end; return itr; @@ -51,9 +57,10 @@ public: auto find(Key const& value) { + auto compare = Compare(); auto end = this->end(); - auto itr = std::lower_bound(this->begin(), end, value, Compare()); - if (itr != end && Compare()(value, *itr)) + auto itr = std::lower_bound(this->begin(), end, value, compare); + if (itr != end && compare(value, *itr)) itr = end; return itr; @@ -63,9 +70,10 @@ public: std::pair<iterator, bool> emplace(Args&&... args) { Key newElement(std::forward<Args>(args)...); + auto compare = Compare(); auto end = this->end(); - auto itr = std::lower_bound(this->begin(), end, newElement, Compare()); - if (itr != end && !Compare()(newElement, *itr)) + auto itr = std::lower_bound(this->begin(), end, newElement, compare); + if (itr != end && !compare(newElement, *itr)) return { itr, false }; return { _storage.emplace(itr, std::move(newElement)), true }; @@ -88,15 +96,8 @@ public: void shrink_to_fit() { _storage.shrink_to_fit(); } - friend bool operator==(FlatSet const& left, FlatSet const& right) - { - return left._storage == right._storage; - } - - friend bool operator!=(FlatSet const& left, FlatSet const& right) - { - return !(left == right); - } + friend std::strong_ordering operator<=>(FlatSet const& left, FlatSet const& right) = default; + friend bool operator==(FlatSet const& left, FlatSet const& right) = default; private: KeyContainer _storage; |