Сортировка вектора по алфавиту по значению индекса

У меня есть вектор, который я хочу отсортировать по алфавиту. Я успешно смог отсортировать его по одному значению индексов в алфавитном порядке, но когда я это делаю, меняется только порядок этого индекса, а не весь вектор. Как я могу заставить его применить изменение порядка ко всему вектору?
Это мой текущий код, который я запускаю:

std::sort (myvector[2].begin(), myvector[2].end(), compare);

bool icompare_char(char c1, char c2)
{
return std::toupper(c1) < std::toupper(c2);
}

bool compare(std::string const& s1, std::string const& s2)
{
if (s1.length() > s2.length())
return true;
if (s1.length() < s2.length())
return false;
return std::lexicographical_compare(s1.begin(), s1.end(),
s2.begin(), s2.end(),
icompare_char);
}

Моя общая структура для этого вектора — вектор [строка] [столбец] где:

| One | Two | Three |
|  1  |  2  |   3   |
|  b  |  a  |   c   |

Например, если бы у меня был вектор:

myvector[0][0] = 'One' AND myvector[2][0]='b'
myvector[0][1] = 'Two' AND myvector[2][1]='a'
myvector[0][2] = 'Three' AND myvector[2][2]='c'

| One | Two | Three |
|  1  |  2  |   3   |
|  b  |  a  |   c   |

И я сортирую это я получаю:

myvector[0][0] = 'One' AND myvector[2][0]='a'
myvector[0][1] = 'Two' AND myvector[2][1]='b'
myvector[0][2] = 'Three' AND myvector[2][2]='c'

| One | Two | Three |
|  1  |  2  |   3   |
|  a  |  b  |   c   |

а не то что я хочу

myvector[0][0] = 'Two' AND myvector[2][0]='a'
myvector[0][1] = 'One' AND myvector[2][1]='b'
myvector[0][2] = 'Three' AND myvector[2][2]='c'

| Two | One | Three |
|  2  |  1  |   3   |
|  a  |  b  |   c   |

Я искал хороший подход, но не мог найти ничего, что сработало … Я думал что-то вроде:

std::sort (myvector.begin(), myvector.end(), compare);

Затем обработайте сортировку третьего индекса в моей функции сравнения, чтобы отредактировать весь вектор … но когда я передавал свои данные, я либо только изменял порядок в функции, но все равно не менял верхний слой или получал ошибки. Любой совет или помощь будет принята с благодарностью. Заранее спасибо.

0

Решение

В идеале объединить 3 поля данных в struct так что вы можете иметь только 1 вектор и сортировать его просто.

struct DataElement{
std::string str;
char theChar;
int num;
bool operator<(const DataElement& other)const{return theChar<other.theChar;}
};

std::vector<DataElement> myvector;

std::sort (myvector.begin(), myvector.end());
4

Другие решения

Других решений пока нет …