![]() |
|
Модераторы: bsa |
![]()
|
|
| TupDub |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 21.11.2009 Репутация: нет Всего: нет |
Здравствуйте!
Хочу написать сортировку вектора со структурами с помощью qsort. Получается это
Никак не пойму, почему при компиляции выдаёт ошибку:
Помогите исправить! Спасибо. |
||||
|
|||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
использовать qsort с STL это же не камильфо.
В стл есть свои алгоритмы : sort; stable_sort вам обязательно нужно qsort использовать с вектором ? |
|||
|
||||
| TupDub |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 21.11.2009 Репутация: нет Всего: нет |
volatile, вы не могли бы продемонстрировать использование sort с вектором структур типа моих ?
Добавлено @ 18:27 Упс! ПОлучилось так
Но всё равно мне интересно, почему с qsort не работает ? И ещё компилятор выдаёт предупрежедение
Как его убрать ? Это сообщение отредактировал(а) TupDub - 27.2.2011, 18:29 |
||||
|
|||||
| volatile |
|
||||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
ок. Для начала напишем функтор сравнения: Это как-то так.
Ну и сортируем наш вектор примерно таким вызовом:
Добавлено через 2 минуты и 33 секунды С функтором, по сравнению с функцией, работает быстрее. Проверено. Добавлено через 3 минуты и 45 секунд можно и с qsort
Добавлено через 7 минут и 9 секунд
Запишите так:
|
||||||||||
|
|||||||||||
| TupDub |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 21.11.2009 Репутация: нет Всего: нет |
volatile, Спасибо за помощь!
А почему вы пишите const Track & arg1, а не Track arg1 ? |
|||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
В функции сравнения мы не меняем члены, поэтому по-правилам хорошего тона, нужно использовать конст. Ну это обычное дела же, в С++. Добавлено через 2 минуты и 23 секунды Да и вашем варианте будет копирование структуры, каждый раз для сравнения. Это же потеря производительности. В моем варианте передается ссылка, что гораздо быстрее |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
TupDub, volatile хотел сказать, что когда ты указываешь Track arg в качестве параметра функции, то при вызове произойдет копирование указанной структуры. Это операция может быть довольно долгой. Поэтому нужно передавать по ссылке. Но так как ты менять объект не собираешься, то следует указать const. Это как минимум документирует код, а еще дает ряд плюшек, которые сможешь оценить позже. |
|||
|
||||
| TupDub |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 21.11.2009 Репутация: нет Всего: нет |
bsa, volatile, Спасибо вам за помощь!
|
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |