diff options
-rw-r--r-- | src/corelib/tools/qcontainertools_impl.h | 17 | ||||
-rw-r--r-- | src/corelib/tools/qset.h | 12 | ||||
-rw-r--r-- | src/corelib/tools/qset.qdoc | 9 |
3 files changed, 38 insertions, 0 deletions
diff --git a/src/corelib/tools/qcontainertools_impl.h b/src/corelib/tools/qcontainertools_impl.h index 79c41fee87..54de6a8815 100644 --- a/src/corelib/tools/qcontainertools_impl.h +++ b/src/corelib/tools/qcontainertools_impl.h @@ -198,6 +198,23 @@ auto sequential_erase_if(Container &c, Predicate &pred) return result; } +template <typename T, typename Predicate> +qsizetype qset_erase_if(QSet<T> &set, Predicate &pred) +{ + qsizetype result = 0; + auto it = set.begin(); + const auto e = set.end(); + while (it != e) { + if (pred(*it)) { + ++result; + it = set.erase(it); + } else { + ++it; + } + } + return result; +} + } // namespace QtPrivate QT_END_NAMESPACE diff --git a/src/corelib/tools/qset.h b/src/corelib/tools/qset.h index a3e541ea5e..3a51988852 100644 --- a/src/corelib/tools/qset.h +++ b/src/corelib/tools/qset.h @@ -93,6 +93,12 @@ public: inline bool remove(const T &value) { return q_hash.remove(value) != 0; } + template <typename Pred> + inline qsizetype removeIf(Pred predicate) + { + return QtPrivate::qset_erase_if(*this, predicate); + } + inline bool contains(const T &value) const { return q_hash.contains(value); } bool contains(const QSet<T> &set) const; @@ -361,6 +367,12 @@ public: }; #endif // QT_NO_JAVA_STYLE_ITERATORS +template <typename T, typename Predicate> +qsizetype erase_if(QSet<T> &set, Predicate pred) +{ + return QtPrivate::qset_erase_if(set, pred); +} + QT_END_NAMESPACE #endif // QSET_H diff --git a/src/corelib/tools/qset.qdoc b/src/corelib/tools/qset.qdoc index 4f26d1678c..131d398016 100644 --- a/src/corelib/tools/qset.qdoc +++ b/src/corelib/tools/qset.qdoc @@ -896,3 +896,12 @@ The hash value is independent of the order of elements in \a key, that is, sets that contain the same elements hash to the same value. */ + +/*! \fn template <class T, class Predicate> qsizetype erase_if(QSet<T> &set, Predicate pred) + \relates QSet + \since 6.1 + + Removes all elements for which the predicate \a pred returns true + from the set \a set. Returns the number of elements removed, if + any. +*/ |