Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 210, средняя оценка - 4.73
Evg
Эксперт CАвтор FAQ
18241 / 6366 / 435
Регистрация: 30.03.2009
Сообщений: 17,595
Записей в блоге: 28
#1

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

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

В си можно сортировать массивы используя функцию qsort (и не писать собственных велосипедов). В Си++ такое не проканает в случае сортировки массива классов, потому как копирования данный внутри qsort'а будут проходить мимо конструкторов и операторов присваивания класса. А если у нас не массив, а vector, то труба полная. Т.е. qsort отпадает сразу. Есть ли с тандартной библиотечной поддержке Си++ какое-то средство для сортировки vector'а?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.09.2010, 11:19
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сортировка vector'а (C++):

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

Сортировка слиянием. В каком куске кода происходит сортировка и каким именно образом? - C++
Помогите, пожалуйста, разобраться. Подскажите в каком куске кода происходит сортировка и каким именно образом? #include <iostream> ...

Быстрая сортировка (сортировка Хоара) для связных списков - C++
есть у кого готовый алгоритм? или подскажите как реализовать

Быстрая сортировка(сортировка Хоара). Отсортировать фрагмент массива - C++
Мне нужно отсортировать фрагмент массива, расположенный между первым и последним отрицательным элементом. Немогу понять как устоновить...

Сортировка Шелла и пирамидальная сортировка для символов - C++
Здраствуйте, можете пожалуйста привести пример сортировок шелла и пиромидальной сортировки для символов, а то ничего не могу ...

C/C++ FAQ :: Быстрая сортировка (сортировка Хоара) - C++
Вопрос, скорее академический, по мотивам реализации. Вот в faq приведена реализация этого метода сортировки на C++. В коде есть следующий...

15
CheshireCat
Эксперт С++
2895 / 1244 / 78
Регистрация: 27.05.2008
Сообщений: 3,397
14.09.2010, 11:57 #2
Разумеется.
C++
1
2
3
std::vector<что-то> vec;
// ......
std::sort(vec.begin(), vec.end(), <предикат сортировки>);
3
Evg
Эксперт CАвтор FAQ
18241 / 6366 / 435
Регистрация: 30.03.2009
Сообщений: 17,595
Записей в блоге: 28
14.09.2010, 12:01  [ТС] #3
ОК. Попробуем-с
http://www.cplusplus.com/reference/algorithm/sort/
1
Manjak
269 / 175 / 7
Регистрация: 12.03.2010
Сообщений: 494
14.09.2010, 16:18 #4
Для полной сортировки всего вектора vector<...>::sort или в крайнем случае std::sort(итераторы произвольного доступа), в классе должен быть определен оператор сравнения (я в большинстве случаев просто перегружаю < и == и включаю namespace std::rel_ops) или предикат для сравнения
0
Evg
Эксперт CАвтор FAQ
18241 / 6366 / 435
Регистрация: 30.03.2009
Сообщений: 17,595
Записей в блоге: 28
14.09.2010, 16:22  [ТС] #5
Цитата Сообщение от Manjak Посмотреть сообщение
Для полной сортировки всего вектора vector<...>::sort или в крайнем случае std::sort(итераторы произвольного доступа), в классе должен быть определен оператор сравнения (я в большинстве случаев просто перегружаю < и == и включаю namespace std::rel_ops) или предикат для сравнения
Вот тут http://www.cplusplus.com/reference/stl/ я что-то не нашёл vector::sort
0
Vourhey
Почетный модератор
6486 / 2260 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
14.09.2010, 16:26 #6
Evg, std::sort
0
Evg
Эксперт CАвтор FAQ
18241 / 6366 / 435
Регистрация: 30.03.2009
Сообщений: 17,595
Записей в блоге: 28
14.09.2010, 16:26  [ТС] #7
Цитата Сообщение от Vourhey Посмотреть сообщение
Evg, std::sort
Про это CheshireCat уже написал
0
Manjak
269 / 175 / 7
Регистрация: 12.03.2010
Сообщений: 494
14.09.2010, 16:27 #8
http://msdn.microsoft.com/en-us/library/ecdecxh1(VS.80).aspx
Забыл, у вектора нету встроенной сортировки, у него ж итераторы произвольногодоступа
0
Evg
Эксперт CАвтор FAQ
18241 / 6366 / 435
Регистрация: 30.03.2009
Сообщений: 17,595
Записей в блоге: 28
14.09.2010, 16:30  [ТС] #9
Это std::sort (о котором уже написали), а не vector::sort
0
Vourhey
Почетный модератор
6486 / 2260 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
14.09.2010, 16:35 #10
Цитата Сообщение от Evg Посмотреть сообщение
Про это CheshireCat уже написал
Так я и писал, чтобы ты использовал std::sort, зачем тебе vector::sort, которого нет?
0
Evg
Эксперт CАвтор FAQ
18241 / 6366 / 435
Регистрация: 30.03.2009
Сообщений: 17,595
Записей в блоге: 28
14.09.2010, 16:41  [ТС] #11
Цитата Сообщение от Vourhey Посмотреть сообщение
Так я и писал, чтобы ты использовал std::sort, зачем тебе vector::sort, которого нет?
Так и надо писать, а то я не оракул, чтобы догадываться, что ты имел в виду
0
CheshireCat
Эксперт С++
2895 / 1244 / 78
Регистрация: 27.05.2008
Сообщений: 3,397
14.09.2010, 17:09 #12
Для правильного сравнения элементов вектора, если они имеют нетривиальный класс, достаточно перегрузить bool Мой_класс.operator<(const Мой_класс& object).
0
Evg
Эксперт CАвтор FAQ
18241 / 6366 / 435
Регистрация: 30.03.2009
Сообщений: 17,595
Записей в блоге: 28
14.09.2010, 17:19  [ТС] #13
Цитата Сообщение от CheshireCat Посмотреть сообщение
Для правильного сравнения элементов вектора, если они имеют нетривиальный класс, достаточно перегрузить bool Мой_класс.operator<(const Мой_класс& object).
Я так понимаю, что это нужно только для случая, когда используется sort с двумя параметрами
0
Manjak
269 / 175 / 7
Регистрация: 12.03.2010
Сообщений: 494
14.09.2010, 17:47 #14
Да, этот вариант использует std::less , который сравнивает обьекты оператором <
0
fasked
Эксперт С++
4948 / 2528 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 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
14.09.2010, 20:29
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.09.2010, 20:29
Привет! Вот еще темы с ответами:

Быстрая сортировка (сортировка методом Хоара) - C++
Ввести массив x1,x2,...,x20 в диапазоне . Требуется расположить отрицательные элементы в порядке убывания. Вывести массивы до и после...

Сортировка вектора по полю(Сортировка вставками) - C++
Здравствуйте! Нужно написать сортировку вектора по полю weight класса tomato. Вот класс: #pragma once #include &lt;iostream&gt; ...

2 сортировки: пирамидальная сортировка и сортировка слиянием - C++
Реализовать два улучшенных алгоритма сортировки. Для каждого алгоритма вычислить показатель качества сортировки (количество операций, т.е....

Сортировка Хоара / Быстрая сортировка - C++
Доброго времени суток. Написал реализацию алгоритма быстрой сортировки. void SortHhoar(int *arr,int f,int l)//Хоара { int mid = (f...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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