Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.61/312: Рейтинг темы: голосов - 312, средняя оценка - 4.61
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
1

Сортировка vector'а

14.09.2010, 11:19. Показов 60908. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В си можно сортировать массивы используя функцию qsort (и не писать собственных велосипедов). В Си++ такое не проканает в случае сортировки массива классов, потому как копирования данный внутри qsort'а будут проходить мимо конструкторов и операторов присваивания класса. А если у нас не массив, а vector, то труба полная. Т.е. qsort отпадает сразу. Есть ли с тандартной библиотечной поддержке Си++ какое-то средство для сортировки vector'а?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.09.2010, 11:19
Ответы с готовыми решениями:

Сортировка выбором, сортировка вставкой, сортировка заменой, сортировка обменом ("пузырьковая" сортировка)
Создать класс, содержащий массив и реализующий алгоритмы сортировки и бинарного поиска в этом...

Блок схема.Сортировка «Пузырьком», Сортировка методом «Последовательных перестановок», Сортировка «Вставками»
Помогите, нужны блок схемы Сортировка «Вставками» Program Vstavka; uses dos; Type mass=array ...

Разработать программу сортировки: сортировка перестановкой, сортировка вставкой, быстрая сортировка
Задание: Разработать программу сортировки: - сортировка перестановкой - сортировка...

1)Бинарный поиск 2)Сортировка включением 3)Шейкерная сортировка 4)Сортировка разделением
1)В заданном массиве К(N) найти индексы элементов, которые кратны минимальному значению элемента...

15
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
14.09.2010, 11:57 2
Разумеется.
C++
1
2
3
std::vector<что-то> vec;
// ......
std::sort(vec.begin(), vec.end(), <предикат сортировки>);
3
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
14.09.2010, 12:01  [ТС] 3
ОК. Попробуем-с
http://www.cplusplus.com/reference/algorithm/sort/
2
270 / 176 / 46
Регистрация: 12.03.2010
Сообщений: 494
14.09.2010, 16:18 4
Для полной сортировки всего вектора vector<...>::sort или в крайнем случае std::sort(итераторы произвольного доступа), в классе должен быть определен оператор сравнения (я в большинстве случаев просто перегружаю < и == и включаю namespace std::rel_ops) или предикат для сравнения
0
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
14.09.2010, 16:22  [ТС] 5
Цитата Сообщение от Manjak Посмотреть сообщение
Для полной сортировки всего вектора vector<...>::sort или в крайнем случае std::sort(итераторы произвольного доступа), в классе должен быть определен оператор сравнения (я в большинстве случаев просто перегружаю < и == и включаю namespace std::rel_ops) или предикат для сравнения
Вот тут http://www.cplusplus.com/reference/stl/ я что-то не нашёл vector::sort
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
14.09.2010, 16:26 6
Evg, std::sort
0
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
14.09.2010, 16:26  [ТС] 7
Цитата Сообщение от Vourhey Посмотреть сообщение
Evg, std::sort
Про это CheshireCat уже написал
0
270 / 176 / 46
Регистрация: 12.03.2010
Сообщений: 494
14.09.2010, 16:27 8
http://msdn.microsoft.com/en-u... S.80).aspx
Забыл, у вектора нету встроенной сортировки, у него ж итераторы произвольногодоступа
0
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
14.09.2010, 16:30  [ТС] 9
Цитата Сообщение от Manjak Посмотреть сообщение
Это std::sort (о котором уже написали), а не vector::sort
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
14.09.2010, 16:35 10
Цитата Сообщение от Evg Посмотреть сообщение
Про это CheshireCat уже написал
Так я и писал, чтобы ты использовал std::sort, зачем тебе vector::sort, которого нет?
0
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
14.09.2010, 16:41  [ТС] 11
Цитата Сообщение от Vourhey Посмотреть сообщение
Так я и писал, чтобы ты использовал std::sort, зачем тебе vector::sort, которого нет?
Так и надо писать, а то я не оракул, чтобы догадываться, что ты имел в виду
0
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
14.09.2010, 17:09 12
Для правильного сравнения элементов вектора, если они имеют нетривиальный класс, достаточно перегрузить bool Мой_класс.operator<(const Мой_класс& object).
0
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
14.09.2010, 17:19  [ТС] 13
Цитата Сообщение от CheshireCat Посмотреть сообщение
Для правильного сравнения элементов вектора, если они имеют нетривиальный класс, достаточно перегрузить bool Мой_класс.operator<(const Мой_класс& object).
Я так понимаю, что это нужно только для случая, когда используется sort с двумя параметрами
0
270 / 176 / 46
Регистрация: 12.03.2010
Сообщений: 494
14.09.2010, 17:47 14
Да, этот вариант использует std::less , который сравнивает обьекты оператором <
0
Эксперт С++
5043 / 2622 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 1
14.09.2010, 20:29 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);
}
3
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
15.09.2010, 11:31  [ТС] 16
fasked, по ссылке в посте 3 есть и описание и пример. Посты, начиная с 4-го, по большому счёту можно с чистой совестью удалять
0
15.09.2010, 11:31
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.09.2010, 11:31
Помогаю со студенческими работами здесь

Сортировка массива целых чисел A(n) по убыванию(используя метод обменная сортировка)
Помогите написать программу для сортировки массива целых чисел A(n) по убыванию(используя метод...

Сортировка Шелла. Написал программу, не могу понять, почему сортировка не выполняется
Программа создает динамический массив с рандомным заполнением. Дальше выбор сортировок, пузырьком...

Быстрая сортировка, ситуация, при которой сортировка работает не корректно
Procedure sort(m, l: Integer); Var i, j, x, w: Integer; Begin i := m; j := l; x...

Сортировка слиянием. В каком куске кода происходит сортировка и каким именно образом?
Помогите, пожалуйста, разобраться. Подскажите в каком куске кода происходит сортировка и каким...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru