Core/Utils: Added .contains member function to FlatSet

This commit is contained in:
Shauren
2025-08-15 12:37:47 +02:00
parent 764b6a5a93
commit a27e3a52a0

View File

@@ -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;