C++Builder
  Начало   Форум   Помощь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Поиск в диапазоне значений  (Прочитано 1765 раз)
SilverFish
Участник


Сказали спасибо: +14/-6
Offline

Сообщений: 786


Поиск в диапазоне значений
« : 04 Август 2014, 10:39:46 »

Пользователь выбирает файл из папки. Мне надо проверить, что расширение этого файла принадлежит одному из значений:
*.mp4;*.avi;*.mpeg;*.wmv;*.divx;*.mov;*.mkv;*.xvid;*.flv;*.f4v;*.3gp;*.vob;*.webm;
Я думаю, создать STL вектор свыше указанными значениями и искать в нем.
Какой подход поиска наиболее правилен для такой задачи?




Записан
POV
Участник


Сказали спасибо: +107/-7
Offline

Сообщений: 640


Re: Поиск в диапазоне значений
« Ответ #1 : 04 Август 2014, 10:41:28 »

Не знаю может ли быть чисто сишное множество (Set) использовать String. Но если да, то там всё красиво получится.
Записан
OVE
Участник


Сказали спасибо: +67/-0
Offline

Сообщений: 72


Re: Поиск в диапазоне значений
« Ответ #2 : 05 Август 2014, 09:08:34 »

Я бы выбрал STL Set. Он упорядочен. Поиск там побыстрее будет. Хотя, на 10-15 элементах это вряд ли будет заметно.
А чисто сишное множество (Set) со String не будет работать.
Записан
volvo877
Глобальный модератор


Сказали спасибо: +736/-1
Offline

Сообщений: 891


Re: Поиск в диапазоне значений
« Ответ #3 : 05 Август 2014, 10:06:59 »

Цитата: SilverFish от 04 Август 2014, 10:39:46
Я думаю, создать STL вектор свыше указанными значениями и искать в нем.
Зачем? Есть же функция AnsiIndexText, проверяющая, содержится ли заданная строка в определенном массиве... На таких смешных количествах, как 10-20 элементов оно летать будет.
Записан
S0mbre
Глобальный модератор


Сказали спасибо: +1113/-22
Offline

Сообщений: 2132

S0mbre


Re: Поиск в диапазоне значений
« Ответ #4 : 05 Август 2014, 19:29:20 »

Действительно, STL значительно утяжелит конечный исполняемый файл, т.к. на 90% опирается на шаблоны (т.е. компилятор генерирует избыточный код). Лучше в твоем случае использовать стандартные функции RTL (см. пост выше). Другой пример
Код
 
bool IsExtOk(const String& Ext) {
 std::unique_ptrTStringList> slList(new TStringList());
 slList->Text = "mp4\navi\nmpeg\nwmv\ndivx\nmov\nmkv\nxvid\nflv\nf4v\n3gp\nvob\nwebm";
 return (slList->IndexOf(Ext.LowerCase()) >= 0);
}
 
Записан
SilverFish
Участник


Сказали спасибо: +14/-6
Offline

Сообщений: 786


« Ответ #5 : 06 Август 2014, 00:51:33 »

Большое спасибо за интересные варианты!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  




....

Powered by SMF 1.1.21 | SMF © 2025, Simple Machines
Страница сгенерирована за 0.057 секунд. Запросов: 19.