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;
|
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
|
} // namespace QtPrivate
|
||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
@ -93,6 +93,12 @@ public:
|
|||||||
|
|
||||||
inline bool remove(const T &value) { return q_hash.remove(value) != 0; }
|
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); }
|
inline bool contains(const T &value) const { return q_hash.contains(value); }
|
||||||
|
|
||||||
bool contains(const QSet<T> &set) const;
|
bool contains(const QSet<T> &set) const;
|
||||||
@ -361,6 +367,12 @@ public:
|
|||||||
};
|
};
|
||||||
#endif // QT_NO_JAVA_STYLE_ITERATORS
|
#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
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
#endif // QSET_H
|
#endif // QSET_H
|
||||||
|
@ -896,3 +896,12 @@
|
|||||||
The hash value is independent of the order of elements in \a key, that is, sets
|
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.
|
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