Может ли кто-нибудь сказать мне лучший способ отсортировать вектор 2d по столбцу на C++ без использования boost. Я сделал некоторые поиски, и я не могу найти хороший ответ.C++ sort 2d vector по столбцу
Благодаря
Может ли кто-нибудь сказать мне лучший способ отсортировать вектор 2d по столбцу на C++ без использования boost. Я сделал некоторые поиски, и я не могу найти хороший ответ.C++ sort 2d vector по столбцу
Благодаря
Чтобы ответить на это, я должен сделать предположения, то есть вы могли бы предоставить нам больше информации.
Успение 1: То, что вы называете «2D-вектор», представляет собой вектор векторов, например. a vector<vector<int>>
.
Успение 2а: внутренние векторы представляют собой строки, что означает, что вы хотите отсортировать внешний вектор, например. второй элемент его внутренних векторов. В этом случае std::sort
срабатывает, что имеет перегрузку, которая принимает в качестве третьего аргумента компаратора. Единственное, что вам нужно сделать, это написать компаратор (т. Е. Объект функции или функтора), который принимает два вектора и сравнивает их по N-му элементу. Не должно быть слишком сложно.
Успение 2b: внутренними векторами являются столбцы , то есть вы хотите отсортировать один из внутренних векторов и применить переупорядочивания к каждой другой строке. Это немного сложнее, например. вы можете сделать еще один вектор индексов от 0 до N и отсортировать его с помощью компаратора, который, учитывая два индекса i
и j
, сравнивает их, фактически сравнивая column[i]
и column[j]
. После того, как вы отсортировали этот вектор, вы можете соответствующим образом изменить порядок всех столбцов.
2a относится ко мне. Спасибо, я попробую – user1893354
yep works. Я использовал функцию компаратора bool myfunction (вектор
Рода() Функция в STL может сделать это для вас. Вам просто нужно написать функцию для сравнения двух случаев в вашем векторе.
http://www.cplusplus.com/reference/algorithm/sort/
После, это зависит от типа рода вам нужно, вы можете сортировать столбцы по одному, то первый ряд.
Какие два случая? – user1893354
Я не уверен, что буду следовать за вами, вы можете дать нам код вашей векторной декларации и когда вы добавите данные? – Apaachee
Предположительно у вас есть «вектор векторов». Какой вектор является вашей колонкой, внутренней или внешней? Это имеет большое значение. И каков ваш критерий сортировки? – john
Его вектор 3x3, где я нажимаю вектор 1x3 на внешний вектор 3 раза. Это векторы ints, поэтому я просто пытаюсь сортировать по 2-й колонке в порядке убывания. – user1893354