Как сортировать с учётом чисел?

У меня есть данные типа std::string:

N58
N14
S12
N4
S17
N29

Как мне отсортировать их по возрастанию от N до S?

Нужно сравнить для начал N и S а потом цифры чтобы получилось так:

N4
N14
N29
N58
S12
S17

Ответы (1 шт):

Автор решения: timur

Можно использовать std::sort с использованием компаратора:

#include <iostream>
#include <algorithm>
#include <string>

//...

std::string data[] = {
    "N58",
    "N14",
    "S12",
    "N4",
    "S17",
    "N29"
};

std::sort(std::begin(data), std::end(data), [](std::string str1, std::string str2)
    { return (str1[0] == str2[0]) ? (stoi(str1.substr(1)) < stoi(str2.substr(1))) : (str1[0] < str2[0]); });

for (auto& str : data) {
    std::cout << str << std::endl;
} // => N4 N14 N29 N58 S12 S17
→ Ссылка