QSet: add erase_if
[ChangeLog][QtCore][QSet] Added erase_if() for consistent container erasure. Added removeIf() as a method. Change-Id: I4af57b654036aa08bee3f769ab2f60be37115094 Reviewed-by: Andrei Golubev <andrei.golubev@qt.io> Reviewed-by: Lars Knoll <lars.knoll@qt.io>
This commit is contained in:
parent
c176525f13
commit
62dad9be9e
@ -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
|
||||
|
@ -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
|
||||
|
@ -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.
|
||||
*/
|
||||
|
Loading…
x
Reference in New Issue
Block a user