From e12e2b43b7e6b42d17556eb8ed392c31589a0b4a Mon Sep 17 00:00:00 2001 From: Giuseppe D'Angelo Date: Fri, 16 Oct 2020 20:52:48 +0200 Subject: Associative containers: add erase_if Use a trick similar to the one we use for their ranged constructors: support predicates that either take a container's iterator, or that take a std::pair (for STL compatibility). [ChangeLog][QtCore][QMap] Added removeIf() and erase_if(). [ChangeLog][QtCore][QMultiMap] Added removeIf() and erase_if(). [ChangeLog][QtCore][QHash] Added removeIf() and erase_if(). [ChangeLog][QtCore][QMultiHash] Added removeIf() and erase_if(). Change-Id: Ie40aadf6217d7a4126a626c390d530812ebcf020 Reviewed-by: Andrei Golubev Reviewed-by: Lars Knoll Reviewed-by: Thiago Macieira --- src/corelib/tools/qhash.h | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'src/corelib/tools/qhash.h') diff --git a/src/corelib/tools/qhash.h b/src/corelib/tools/qhash.h index 8134f4402c..65ae9b75fd 100644 --- a/src/corelib/tools/qhash.h +++ b/src/corelib/tools/qhash.h @@ -872,6 +872,11 @@ public: d->erase(it); return true; } + template + qsizetype removeIf(Predicate pred) + { + return QtPrivate::associative_erase_if(*this, pred); + } T take(const Key &key) { if (isEmpty()) // prevents detaching shared null @@ -1354,6 +1359,11 @@ public: d->erase(it); return n; } + template + qsizetype removeIf(Predicate pred) + { + return QtPrivate::associative_erase_if(*this, pred); + } T take(const Key &key) { if (isEmpty()) // prevents detaching shared null @@ -1946,6 +1956,18 @@ inline size_t qHash(const QMultiHash &key, size_t seed = 0) return hash; } +template +qsizetype erase_if(QHash &hash, Predicate pred) +{ + return QtPrivate::associative_erase_if(hash, pred); +} + +template +qsizetype erase_if(QMultiHash &hash, Predicate pred) +{ + return QtPrivate::associative_erase_if(hash, pred); +} + QT_END_NAMESPACE #endif // QHASH_H -- cgit v1.2.3