2013-04-19 2 views
1

Может ли кто-нибудь сказать мне лучший способ отсортировать вектор 2d по столбцу на C++ без использования boost. Я сделал некоторые поиски, и я не могу найти хороший ответ.C++ sort 2d vector по столбцу

Благодаря

+0

Предположительно у вас есть «вектор векторов». Какой вектор является вашей колонкой, внутренней или внешней? Это имеет большое значение. И каков ваш критерий сортировки? – john

+0

Его вектор 3x3, где я нажимаю вектор 1x3 на внешний вектор 3 раза. Это векторы ints, поэтому я просто пытаюсь сортировать по 2-й колонке в порядке убывания. – user1893354

ответ

2

Чтобы ответить на это, я должен сделать предположения, то есть вы могли бы предоставить нам больше информации.

Успение 1: То, что вы называете «2D-вектор», представляет собой вектор векторов, например. a vector<vector<int>>.

Успение 2а: внутренние векторы представляют собой строки, что означает, что вы хотите отсортировать внешний вектор, например. второй элемент его внутренних векторов. В этом случае std::sort срабатывает, что имеет перегрузку, которая принимает в качестве третьего аргумента компаратора. Единственное, что вам нужно сделать, это написать компаратор (т. Е. Объект функции или функтора), который принимает два вектора и сравнивает их по N-му элементу. Не должно быть слишком сложно.

Успение 2b: внутренними векторами являются столбцы , то есть вы хотите отсортировать один из внутренних векторов и применить переупорядочивания к каждой другой строке. Это немного сложнее, например. вы можете сделать еще один вектор индексов от 0 до N и отсортировать его с помощью компаратора, который, учитывая два индекса i и j, сравнивает их, фактически сравнивая column[i] и column[j]. После того, как вы отсортировали этот вектор, вы можете соответствующим образом изменить порядок всех столбцов.

+0

2a относится ко мне. Спасибо, я попробую – user1893354

+0

yep works. Я использовал функцию компаратора bool myfunction (вектор i, вектор j) {return (i [2] user1893354

1

Рода() Функция в STL может сделать это для вас. Вам просто нужно написать функцию для сравнения двух случаев в вашем векторе.

http://www.cplusplus.com/reference/algorithm/sort/

После, это зависит от типа рода вам нужно, вы можете сортировать столбцы по одному, то первый ряд.

+0

Какие два случая? – user1893354

+0

Я не уверен, что буду следовать за вами, вы можете дать нам код вашей векторной декларации и когда вы добавите данные? – Apaachee