По сути, вы спрашиваете, можно ли проверить все элементы на наличие
совпадать, не проверяя все элементы. Если есть какой-то внешний
метаинформации (например, данные отсортированы), это может быть возможно (например,
используя бинарный поиск). В противном случае, по самой своей природе, чтобы проверить все
элементы, вы должны проверить все элементы.
Если вы собираетесь делать много таких поисков в списке и в списке
не меняется, вы можете подумать о расчете второй таблицы с хорошим
хеш-код записей; снова в зависимости от типа данных, являющихся
посмотрел вверх, это может быть более эффективным для вычисления хэш-кода
индексировать и сначала сравнивать хеш-коды, сравнивая только строки, если
хэш-коды были равны. Является ли это улучшением или нет в значительной степени
зависит от размера таблицы и типа данных в ней. Ты можешь
также быть в состоянии использовать знания о данных в строках; если
все они, например, URL, в основном начинающиеся с "http://www."
,
начать сравнение с десятого символа и вернуться только к
сравните первые 10, если все остальные равны, может закончиться большим
выиграть.
Что касается поиска подстрок, вы можете использовать std::search
для каждой
элемент:
for ( std::vector<std::string::const_iterator iter = serverList.begin();
iter != serverList.end();
++ iter ) {
if ( std::search( iter->begin(), iter->end(),
index.begin(), index.end() ) != iter->end() ) {
indexResult.push_back( iter - serverList.begin() );
}
}
В зависимости от количества искомых элементов и длины
участвующие строки, может быть более эффективно использовать что-то вроде
BM-поиск, однако, предварительно компилирует строку поиска до необходимого
таблицы перед входом в цикл.