QStringList list;
QStringList::iterator i, j;
...
i = qLowerBound(list.begin(), list.end(), value);
j = qUpperBound(list.begin(), list.end(), value);
while (i != j) {
processItem(*i);
++i;
}
Пример: статическая Map
В этой секции, мы будем использовать бинарный поиск, для реализации "static const" map. Структура данных полностью хранится в памяти и состоит из пары "фамилия, имя", которые отсортированы по фамилии. По сравнению с использованием QMap или QHash, этот подход экономит память и имеет смысл в высоко оптимизированных приложениях или библиотеках.
Сначала, мы определяем структуру для имен, а так же операторы сравнения для поиска вхождения фамилий:
struct Entry {
const char *familyName;
const char *givenName;
};
bool operator<(const Entry &entry, const QString &family)
{
return entry.familyName < family;
}
bool operator<(const QString &family, const Entry &entry)
{
return family < entry.familyName;
}
Затем объявляем наши данные:
static const int NumEntries = 4;
static const Entry entries[NumEntries] = {