Здравствуйте, nen777w, Вы писали:
К>>Вопрос в том, чтобы сделать поиск более эффективно, чем линейно пробежаться и проверить каждый элемент на совпадение с маской?
К>>Вынужден огорчить: в общем случае углы срезать не получится.
К>>Всё, что мы можем сделать — это взять префикс из маски (скажем, для "abc*def*ghi" — префикс будет "abc") и ограничить область забега диапазоном ["abc"-"abd")
N>Гм... неужели никак не получится написать такой предикат, префикс конечно самый простой вариант но нет то. Получается что свойство что множество строк упорядоченно
N>никак нельзя использовать что бы матчить его на wildcard. Только find_if — слишком долго :-(
Так расскажи подробнее чего хочешь добиться, а не как это сейчас решаешь.
Если тебе разные нужно регулярные выражения в коллекции строк искать, то это делается по другому. Нужно строить и поддерживать индексы. А тут уже возможны варианты: от быстрых но сложных суффиксных деревьев, до простых, но часто эффективных, n-грамных индексов (
вот например). Ну и от вида поискового запроса выбор эффективного алгоритма зависит — вдруг у тебя там алфавит огромный или наоборот, или ограничение на максимальную длину замены «*» есть.