Вам нужно пользовательское сравнение, которое находит позицию в vec1
.
auto find = [&vec1](auto & str){ return std::find(vec1.begin(), vec1.end(), str); };
std::stable_sort(vec2.begin(), vec2.end(), [find](auto & lhs, auto & rhs) { return find(lhs) < find(rhs); };
Это упорядочит вещи не в vec1
в конце, в том порядке, в котором они изначально отображались.Если вам все равно, в каком порядке они отображаются, вместо этого вы можете использовать std::sort
.