Форум программистов, компьютерный форум CyberForum.ru

Сортировка vector'а - C++

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 210, средняя оценка - 4.73
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16942 / 5347 / 329
Регистрация: 30.03.2009
Сообщений: 14,377
Записей в блоге: 26
14.09.2010, 11:19     Сортировка vector'а #1
В си можно сортировать массивы используя функцию qsort (и не писать собственных велосипедов). В Си++ такое не проканает в случае сортировки массива классов, потому как копирования данный внутри qsort'а будут проходить мимо конструкторов и операторов присваивания класса. А если у нас не массив, а vector, то труба полная. Т.е. qsort отпадает сразу. Есть ли с тандартной библиотечной поддержке Си++ какое-то средство для сортировки vector'а?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CheshireCat
Эксперт С++
2907 / 1235 / 78
Регистрация: 27.05.2008
Сообщений: 3,315
14.09.2010, 11:57     Сортировка vector'а #2
Разумеется.
C++
1
2
3
std::vector<что-то> vec;
// ......
std::sort(vec.begin(), vec.end(), <предикат сортировки>);
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16942 / 5347 / 329
Регистрация: 30.03.2009
Сообщений: 14,377
Записей в блоге: 26
14.09.2010, 12:01  [ТС]     Сортировка vector'а #3
ОК. Попробуем-с
http://www.cplusplus.com/reference/algorithm/sort/
Manjak
 Аватар для Manjak
269 / 175 / 7
Регистрация: 12.03.2010
Сообщений: 494
14.09.2010, 16:18     Сортировка vector'а #4
Для полной сортировки всего вектора vector<...>::sort или в крайнем случае std::sort(итераторы произвольного доступа), в классе должен быть определен оператор сравнения (я в большинстве случаев просто перегружаю < и == и включаю namespace std::rel_ops) или предикат для сравнения
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16942 / 5347 / 329
Регистрация: 30.03.2009
Сообщений: 14,377
Записей в блоге: 26
14.09.2010, 16:22  [ТС]     Сортировка vector'а #5
Цитата Сообщение от Manjak Посмотреть сообщение
Для полной сортировки всего вектора vector<...>::sort или в крайнем случае std::sort(итераторы произвольного доступа), в классе должен быть определен оператор сравнения (я в большинстве случаев просто перегружаю < и == и включаю namespace std::rel_ops) или предикат для сравнения
Вот тут http://www.cplusplus.com/reference/stl/ я что-то не нашёл vector::sort
Vourhey
Почетный модератор
6470 / 2245 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
14.09.2010, 16:26     Сортировка vector'а #6
Evg, std::sort
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16942 / 5347 / 329
Регистрация: 30.03.2009
Сообщений: 14,377
Записей в блоге: 26
14.09.2010, 16:26  [ТС]     Сортировка vector'а #7
Цитата Сообщение от Vourhey Посмотреть сообщение
Evg, std::sort
Про это CheshireCat уже написал
Manjak
 Аватар для Manjak
269 / 175 / 7
Регистрация: 12.03.2010
Сообщений: 494
14.09.2010, 16:27     Сортировка vector'а #8
http://msdn.microsoft.com/en-us/libr...h1(VS.80).aspx
Забыл, у вектора нету встроенной сортировки, у него ж итераторы произвольногодоступа
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16942 / 5347 / 329
Регистрация: 30.03.2009
Сообщений: 14,377
Записей в блоге: 26
14.09.2010, 16:30  [ТС]     Сортировка vector'а #9
Это std::sort (о котором уже написали), а не vector::sort
Vourhey
Почетный модератор
6470 / 2245 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
14.09.2010, 16:35     Сортировка vector'а #10
Цитата Сообщение от Evg Посмотреть сообщение
Про это CheshireCat уже написал
Так я и писал, чтобы ты использовал std::sort, зачем тебе vector::sort, которого нет?
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16942 / 5347 / 329
Регистрация: 30.03.2009
Сообщений: 14,377
Записей в блоге: 26
14.09.2010, 16:41  [ТС]     Сортировка vector'а #11
Цитата Сообщение от Vourhey Посмотреть сообщение
Так я и писал, чтобы ты использовал std::sort, зачем тебе vector::sort, которого нет?
Так и надо писать, а то я не оракул, чтобы догадываться, что ты имел в виду
CheshireCat
Эксперт С++
2907 / 1235 / 78
Регистрация: 27.05.2008
Сообщений: 3,315
14.09.2010, 17:09     Сортировка vector'а #12
Для правильного сравнения элементов вектора, если они имеют нетривиальный класс, достаточно перегрузить bool Мой_класс.operator<(const Мой_класс& object).
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16942 / 5347 / 329
Регистрация: 30.03.2009
Сообщений: 14,377
Записей в блоге: 26
14.09.2010, 17:19  [ТС]     Сортировка vector'а #13
Цитата Сообщение от CheshireCat Посмотреть сообщение
Для правильного сравнения элементов вектора, если они имеют нетривиальный класс, достаточно перегрузить bool Мой_класс.operator<(const Мой_класс& object).
Я так понимаю, что это нужно только для случая, когда используется sort с двумя параметрами
Manjak
 Аватар для Manjak
269 / 175 / 7
Регистрация: 12.03.2010
Сообщений: 494
14.09.2010, 17:47     Сортировка vector'а #14
Да, этот вариант использует std::less , который сравнивает обьекты оператором <
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
14.09.2010, 20:29     Сортировка vector'а #15
Цитата Сообщение от Manjak Посмотреть сообщение
Да, этот вариант использует std::less , который сравнивает обьекты оператором <
Можно написать также свой функтор сравнения, если не хочется вносить изменений в класс.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <vector>
#include <algorithm>
 
class Foo {
public:
    int data;
};
 
class cmp {
public:
    bool operator() (const Foo &a, const Foo &b) {
        return a.data < b.data;
    }
} compare;
 
int main()
{
    std::vector<Foo> v;
        
    // .....
    
    std::sort(v.begin(), v.end(), compare);
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.09.2010, 11:31     Сортировка vector'а
Еще ссылки по теме:

Sort vector, сортировка по двум полям структуры C++
C++ Сортировка vector<string> без учёта регистра
Сортировка vector C++
Сортировка vector<vector<int>> C++
Как можно увеличить размер вектора, который является элементом вектора vector<vector<int>>arr(n, vector <int>) C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16942 / 5347 / 329
Регистрация: 30.03.2009
Сообщений: 14,377
Записей в блоге: 26
15.09.2010, 11:31  [ТС]     Сортировка vector'а #16
fasked, по ссылке в посте 3 есть и описание и пример. Посты, начиная с 4-го, по большому счёту можно с чистой совестью удалять
Yandex
Объявления
15.09.2010, 11:31     Сортировка vector'а
Ответ Создать тему
Опции темы

Текущее время: 21:26. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru