Скажем, у меня есть список векторов строк:
["а", "в", "утка"]
["a", "a", "f"]
["пчела", "с", "ху"]
["b", "a", "a"]
Я хочу отсортировать векторы таким образом:
первая сортировка лексикографически по элементу с индексом 0, и если есть ничья, она будет определена лексикографически по отношению к элементу с индексом 1, а если есть другая связь, она будет определена лексикографически по отношению к элементу с индексом 2.
Таким образом, приведенный выше список после сортировки будет выглядеть следующим образом:
["a", "a", "f"]
["а", "в", "утка"]
["b", "a", "a"]
["пчела", "с", "ху"]
Как я могу реализовать функцию sort() из стандартной библиотеки, чтобы написать метод для сортировки списка векторов в соответствии с приведенным выше описанием? Я использую С++. Спасибо.
Нетрудно написать функцию сравнения, когда известна длина каждого вектора. Но что, если я не знаю длины векторов (но я всегда знаю, что они имеют одинаковую длину)? Сравните функцию для векторов длины 3:
bool CompareVector(vector<string> first, vector<string> second){
if (first[0] < second[0])
return true;
if (first[1] < second[1])
return true;
if (first[2] < second[2])
return true;
return false;
}
Таким образом, для векторов длины n будет n операторов if. Но как я могу оставить количество операторов if переменной?
Как насчет этого:
bool CompareVector(vector<string> first, vector<string> second){
for (int i=0; i< first.size(); i++)
if (first[i] < second[i])
return true;
return false;
}
Затем я могу вызвать стандартную функцию сортировки:
sort(vector<vector<string> >input.begin(), vector<vector<string> >input.end(), CompareVector() )
Будет ли это работать? Спасибо.
std::string
. Тогда это легко. - person Violet Giraffe   schedule 03.03.2014