Как уже написал выше Николай Веселуха, надо, в первую очередь, использовать правильную структуру данных.
Запись в базе данных - это некая совокупность полей, описывающих какую-то сущность. Использовать для хранения этих полей разные вектора - очень хреновая идея. Гораздо лучше засунуть их в один класс или одну структуру и хранить коллекцию из этих классов/структур.
Сортировать записи в базе тоже не самая лучшая идея. Да, если у нас всего два поля (имя и код), то накладные расходы будут не очень высокими, но концептуально это все равно неправильно. По хорошему, для организации доступа в каком-либо порядке используют ИНДЕКСЫ (это не те индексы, что определяют положение в массиве, это структура данных в базе данных, которая отсортирована по одному или нескольким полям и связывает запись в индексе с записью в базе). Т.е., допустим, у нас есть запись вида struct Record
{
std::string name,
std::string code;
} а вся база - это std::vector database; Чтобы получить отсортированные по какому-то из полей данные можно, например использовать индекс вида std::map name_idx;
std::map code_idx; где std::string - это имя или код из записи а size_t - это индекс записи в векторе database
Для одновременной сортировки двух векторов в C++ можно использовать алгоритм std::sort вместе с лямбда-функцией. Вот пример кода, который демонстрирует сортировку по имени и по коду:
// Сортировка по имени
std::sort(names.begin(), names.end(),
[&](const std::string& a, const std::string& b) {
int index_a = std::find(names.begin(), names.end(), a) - names.begin();
int index_b = std::find(names.begin(), names.end(), b) - names.begin();
return index_a < index_b;
});