void TextEditorOverlay::mapEquivalentSelections() { m_equivalentSelections.clear(); m_equivalentSelections.resize(m_selections.size()); QMap<QString, int> all; for (int i = 0; i < m_selections.size(); ++i) all.insertMulti(selectionText(i).toLower(), i); const QList<QString> &uniqueKeys = all.uniqueKeys(); foreach (const QString &key, uniqueKeys) { QList<int> indexes; QMap<QString, int>::const_iterator lbit = all.lowerBound(key); QMap<QString, int>::const_iterator ubit = all.upperBound(key); while (lbit != ubit) { indexes.append(lbit.value()); ++lbit; } foreach (int index, indexes) m_equivalentSelections[index] = indexes; }