> Проще и эффективней в новый вектор добавлять найденные записи, а не удалять
> те, что не совпадают по критерию поиска.Как уже писал выше - программа считает, что первой в записи в базе идёт фамилия автора. Но в реальности это далеко не всегда так. В случае с fb2 книгой, там может быть всё, что угодно, например - имя. Всё зависит от того, кто и как оформлял fb2 файл. А пользователь ввёл для поиска фамилию. Которая находится в конце записи, а значит книга в выдачу поиска уже не попадает. Или нужно проводить поиск отдельно по фамилии по всей строке с ФИО. Затем отдельно по имени, и т.д. Т.е. делать несколько переборов базы в любом случае (или строки ФИО, что в общем-то одно и то же). А если в базе 500000 книг или больше? Можно, конечно, оставить только одно поле ввода "Автор", и свалить на пользователя выбор последовательности: "ФИО", "ИОФ" и т.д. Но это уже, по-моему, неправильно. Пользователь совершенно не обязан знать, что и как Вася Пупкин ввёл в поле ФИО при конвертации своего бессмертного творения в fb2. И проходов по базе всё равно будет больше одного. Если же в любом случае нужно делать несколько переборов базы, то разумно с каждым следующим проходом уменьшать количество перебираемых элементов - удалять то, что не соответствует критерию предыдущего перебора.
Далее. Всё это можно проделывать с "оригинальным" вектором базы. Но поисков по одной и той же коллекции может быть несколько подряд. И в случае одного вектора придётся каждый раз читать заново базу. А жёсткий диск работает гораздо медленнее оперативной памяти. Т.е. оптимальный выход - создать копию "оригинального" вектора базы и издеваться уже над ним, тогда как оригинал полежит спокойно до следующего поиска или переключения коллекции.