summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/corelib/tools/qflatmap_p.h78
1 files changed, 28 insertions, 50 deletions
diff --git a/src/corelib/tools/qflatmap_p.h b/src/corelib/tools/qflatmap_p.h
index e066a53661..512dfa4ae7 100644
--- a/src/corelib/tools/qflatmap_p.h
+++ b/src/corelib/tools/qflatmap_p.h
@@ -607,13 +607,13 @@ public:
bool remove(const Key &key)
{
- return do_remove(binary_find(key));
+ return do_remove(find(key));
}
template <class X, class Y = Compare, is_marked_transparent<Y> = nullptr>
bool remove(const X &key)
{
- return do_remove(binary_find(key));
+ return do_remove(find(key));
}
iterator erase(iterator it)
@@ -624,49 +624,49 @@ public:
T take(const Key &key)
{
- return do_take(binary_find(key));
+ return do_take(find(key));
}
template <class X, class Y = Compare, is_marked_transparent<Y> = nullptr>
T take(const X &key)
{
- return do_take(binary_find(key));
+ return do_take(find(key));
}
bool contains(const Key &key) const
{
- return binary_find(key) != end();
+ return find(key) != end();
}
template <class X, class Y = Compare, is_marked_transparent<Y> = nullptr>
bool contains(const X &key) const
{
- return binary_find(key) != end();
+ return find(key) != end();
}
T value(const Key &key, const T &defaultValue) const
{
- auto it = binary_find(key);
+ auto it = find(key);
return it == end() ? defaultValue : it.value();
}
template <class X, class Y = Compare, is_marked_transparent<Y> = nullptr>
T value(const X &key, const T &defaultValue) const
{
- auto it = binary_find(key);
+ auto it = find(key);
return it == end() ? defaultValue : it.value();
}
T value(const Key &key) const
{
- auto it = binary_find(key);
+ auto it = find(key);
return it == end() ? T() : it.value();
}
template <class X, class Y = Compare, is_marked_transparent<Y> = nullptr>
T value(const X &key) const
{
- auto it = binary_find(key);
+ auto it = find(key);
return it == end() ? T() : it.value();
}
@@ -820,26 +820,38 @@ public:
return fromKeysIterator(std::lower_bound(c.keys.begin(), c.keys.end(), key, key_comp()));
}
- iterator find(const key_type &k)
+ iterator find(const Key &key)
{
- return binary_find(k);
+ return { &c, std::as_const(*this).find(key).i };
}
template <class X, class Y = Compare, is_marked_transparent<Y> = nullptr>
iterator find(const X &key)
{
- return binary_find(key);
+ return { &c, std::as_const(*this).find(key).i };
}
- const_iterator find(const key_type &k) const
+ const_iterator find(const Key &key) const
{
- return binary_find(k);
+ auto it = lower_bound(key);
+ if (it != end()) {
+ if (!key_compare::operator()(key, it.key()))
+ return it;
+ it = end();
+ }
+ return it;
}
template <class X, class Y = Compare, is_marked_transparent<Y> = nullptr>
const_iterator find(const X &key) const
{
- return binary_find(key);
+ auto it = lower_bound(key);
+ if (it != end()) {
+ if (!key_compare::operator()(key, it.key()))
+ return it;
+ it = end();
+ }
+ return it;
}
key_compare key_comp() const noexcept
@@ -951,40 +963,6 @@ private:
makeUnique();
}
- iterator binary_find(const Key &key)
- {
- return { &c, std::as_const(*this).binary_find(key).i };
- }
-
- template <class X, class Y = Compare, is_marked_transparent<Y> = nullptr>
- iterator binary_find(const X &key)
- {
- return { &c, std::as_const(*this).binary_find(key).i };
- }
-
- const_iterator binary_find(const Key &key) const
- {
- auto it = lower_bound(key);
- if (it != end()) {
- if (!key_compare::operator()(key, it.key()))
- return it;
- it = end();
- }
- return it;
- }
-
- template <class X, class Y = Compare, is_marked_transparent<Y> = nullptr>
- const_iterator binary_find(const X &key) const
- {
- auto it = lower_bound(key);
- if (it != end()) {
- if (!key_compare::operator()(key, it.key()))
- return it;
- it = end();
- }
- return it;
- }
-
void ensureOrderedUnique()
{
std::vector<size_type> p(size_t(c.keys.size()));