Проблема в том, что ваш howToCompare()
не соответствует требованиям std::sort()
, что предполагает строгий порядок.Возвращаемое логическое значение всегда должно соответствовать предложению «меньше чем».
Здесь исправление вашего исходного кода, который работает, предполагая, что разница в длине между двумя строками - это ноль, вызванный ведущими нулями:
bool howToCompare(string i, string j) {
if(i.length() > j.length()) {
return false;
}
else if(i.length() < j.length()) {
return true;
}
else {
for(int k = 0; k < i.length(); k++) {
if(i[k] < j[k] ) {
return true;
}
else if (i[k] > j[k] ){
return false;
}
}
}
return false;
}
Здесь онлайн-демонстрация (вы также можете попробовать свою старую функцию с некоторыми следами того, что происходит во всех сравнениях)
Здесь онлайн-демонстрация , которая проверяет, являются ли строки только числовыми, обрабатывает другой размер ипотенциальный ведущий 0, и использует векторный контейнер вместо массива.