From 46ebcb6176c25c294c5edbeaaa757fe0ce53903e Mon Sep 17 00:00:00 2001 From: Daniel Teske Date: Fri, 5 Sep 2014 11:51:01 +0200 Subject: Speed up QStringList::removeDuplicates by ~2x QSet::contains needs to hash the string, which is unnecessary, since we can just check if the size of the set changed. Change-Id: I2c7a42bae6cdf351533d5a582a42079658fa7729 Reviewed-by: Marc Mutz Reviewed-by: Oswald Buddenhagen --- src/corelib/tools/qstringlist.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'src/corelib/tools') diff --git a/src/corelib/tools/qstringlist.cpp b/src/corelib/tools/qstringlist.cpp index 0d37b6ea58..cd14bb8b78 100644 --- a/src/corelib/tools/qstringlist.cpp +++ b/src/corelib/tools/qstringlist.cpp @@ -751,11 +751,13 @@ int QtPrivate::QStringList_removeDuplicates(QStringList *that) int j = 0; QSet seen; seen.reserve(n); + int setSize = 0; for (int i = 0; i < n; ++i) { const QString &s = that->at(i); - if (seen.contains(s)) - continue; seen.insert(s); + if (setSize == seen.size()) // unchanged size => was already seen + continue; + ++setSize; if (j != i) that->swap(i, j); ++j; -- cgit v1.2.3