Функция сравнения не соответствует требованиям для заказа объектов с использованием std::sort
.Измените его на
inline bool compare(string a, string b){
return a.size() < b.size(); // Not <= just <
}
Почему использование <=
не работает?
Все элементы вашего вектора являются строками одинакового размера.Следовательно, наша сортировка почти идентична сортировке списка чисел.
Для двух чисел std::sort
должен определить, является ли одно меньше другого, больше другого или они равны.
Учитывая n1
и n2
,
- Если
comp(n1, n2)
возвращает true
, то n1
меньше n2
. - Если
comp(n1, n2)
возвращает false
и comp(n2, n1)
возвращает false
, тогда n1
равно n2
. - Если
comp(n1, n2)
возвращает false
и comp(n2, n1)
возвращает true
, тогдаn1
больше n2
.
Если вы используете <=
в функции сравнения, comp(n1, n2)
возвращает true
и comp(n2, n1)
возвращает true
.Учитывая это, алгоритм сортировки просто не может сортировать ваши объекты, и при попытке сделать это происходит бесконечная рекурсия.