Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
Ronan
1 / 1 / 0
Регистрация: 28.06.2013
Сообщений: 29
1

Сортировка std::list

02.08.2013, 04:53. Просмотров 1622. Ответов 12
Метки нет (Все метки)

Есть такой фрагмент програми. Создаю функцию для сортировки list. Вроде все правильно. В класе перегружены оператори < i =. Не знаю что делать. List просто не сортируеться а ввыводиться в изначальном виде. Может есть еще какие то методи отсортировать???
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void sortL(L  &v){
    int k=v.size();
    Student temp,a,b;
    L::iterator z = v.begin();
    for (int i = 0; i < k; i++)
         for (int j = i + 1; j < k; j++){
            advance(z,i);
            a=*z;
            advance(z,j);
            b=*z;
            if (a<b) {
                temp = a;
                a = b;
                b = temp;
            }
        }
 
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.08.2013, 04:53
Ответы с готовыми решениями:

Сортировка std::list с функцией sort()
У меня задание написать Отсортировать числовую последовательность в порядке...

Сортировка в std::list состоящем из объектов класса
Добрый день. Вопрос в следующем. Допустим у нас есть некий класс A и класс B. В...

Сортировка std::list ошибка компиляции algorithm 3868 error C2784
Добрый день, есть пользовательский класс, с вектором в качестве контейнера всё...

Реализация std::list, сложность list::size()
Часто приходилось пользоваться Listом, но сейчас столкнулся с небольшой...

Потокобезопасность std::map::end, std::list::end
Собсна сабж, могу ли я без синхронизаций выполнять подобного рода код if...

12
Croessmah
++Ͻ
14630 / 8379 / 1582
Регистрация: 27.09.2012
Сообщений: 20,582
Записей в блоге: 2
Завершенные тесты: 1
02.08.2013, 05:12 2
std::list::sort
http://www.cplusplus.com/reference/list/list/sort/
1
Ronan
1 / 1 / 0
Регистрация: 28.06.2013
Сообщений: 29
02.08.2013, 10:28  [ТС] 3
Croessmah, я видел ето, но я сортирую объекти, и мне нужно задать параметр по которому будет проходть сортировка. Объект у меня получает 3 параметра: Student(const string &name,const int age,const int mark); Я хочу просортировать по 3 параметру. как мне это зделать с помощью функции sort? Мне кажеться віход тольо написать свою функцию, адля этого мне надо доступ ко всем елементам списка.
0
0x10
2571 / 1751 / 288
Регистрация: 24.11.2012
Сообщений: 4,378
02.08.2013, 10:43 4
Цитата Сообщение от Ronan Посмотреть сообщение
Мне кажеться віход тольо написать свою функцию
Свою функцию сравнения, но не сортировки.
0
Ronan
1 / 1 / 0
Регистрация: 28.06.2013
Сообщений: 29
02.08.2013, 10:51  [ТС] 5
0x10, почему не сортировки? Я написал функцию для сортировки вектора и она прекрасно работает
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void sortV( V  &v){
    int k=v.size();
    Student temp;
    for (int i = 0; i < k; i++)
           for (int j = i+1; j < k; j++)
              if (v[i] < v[j])
              {
                 temp = v[i];
                 v[i] = v[j];
                 v[j] = temp;
              }
 
 
}
но вот в функии сортировки списка почему то не сортирует, хотя все зделано по аналогии
0
Kuzia domovenok
2337 / 2079 / 487
Регистрация: 25.03.2012
Сообщений: 7,444
Записей в блоге: 1
02.08.2013, 11:03 6
Ronan, и ты не видишь разницы между этими функциями?
Не видишь, что в первой используются итераторы и используются неправильно?
Более того std::list ты не сможешь отсортировать так, как это смог бы сделать stl
Например, в своей попытке сортировки ты обмениваешь элементы по значению. (изначально неправильно делаешь, копируя элементы в student a, b; но не только это)
При этом теряется главное преимущество списков: элементы не меняют своего места в памяти при перестановках.

Добавлено через 3 минуты
Короче, почитай книгу Мейерса что ли...
Иметь итераторы и всё равно запускать циклы по счётчику i с последующим вызовом advance?
Ты серьёзно? Вообще-то advance при вызове будет повторять точно такой же цикл по второму разу, но уже с итераторами!

Добавлено через 2 минуты
Цитата Сообщение от Ronan Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
Student temp,a,b;
* * * * * * a=*z;
* * * * * * advance(z,j);
* * * * * * b=*z;
* * * * * * if (a<b) {
* * * * * * * * temp = a;
* * * * * * * * a = b;
* * * * * * * * b = temp;
* * * * * * }
А вот здесь? Ты реально думаешь, что тут что-то поменялось в списке кроме локальных переменных a и b, хранящих КОПИИ двух элементов из списка?
0
Ronan
1 / 1 / 0
Регистрация: 28.06.2013
Сообщений: 29
02.08.2013, 11:12  [ТС] 7
Kuzia domovenok, да канешно думаю, если б не думал то не делал так. я еще не знаю всего про с++, по етому и сижу в теме с++ для начинающих. Ы если так нельзя так как мне посортировать список?????
0
alsav22
5442 / 4837 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
02.08.2013, 17:04 8
Цитата Сообщение от Ronan Посмотреть сообщение
так как мне посортировать список?????
Для начала нужно видеть, что он из себя представляет. Это же не list STL?
0
Kuzia domovenok
2337 / 2079 / 487
Регистрация: 25.03.2012
Сообщений: 7,444
Записей в блоге: 1
02.08.2013, 17:23 9
Цитата Сообщение от alsav22 Посмотреть сообщение
Это же не list STL?
почему это? мне казалось, тема именно об STL!
0
alsav22
5442 / 4837 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
02.08.2013, 17:57 10
Разве в list нет сортировки?
0
Ronan
1 / 1 / 0
Регистрация: 28.06.2013
Сообщений: 29
02.08.2013, 18:21  [ТС] 11
alsav22, Это list STL. В нем есть сортировка list::sort(). Но мне нужно отсортировать List у которого елементы это обьекты класа Student. При создании обьекта ему передаеться 3 величины : Student(const string &name,const int age,const int mark), и сортировку я хочу провести по елементу int mark. И так здесь много сказано но ничего по сути. Хотя я теперь знаю что так я делал нельзя. Может кто то скзаать как мне отсортировать list?????? Ниже приведен пример как работает сортировка вектора и не работает сортировка списка по значению оценки(mark)

Container 'Vector' sorted:
Mark is 23 years old and his(her) mark is:100
Petro is 18 years old and his(her) mark is:93
Mika is 18 years old and his(her) mark is:76
Student is 17 years old and his(her) mark is:71
Container 'List' sorted:
Harry is 23 years old and his(her) mark is:72
John is 34 years old and his(her) mark is:75
Ivan is 17 years old and his(her) mark is:88
Mark is 23 years old and his(her) mark is:100
Harry is 23 years old and his(her) mark is:72
John is 34 years old and his(her) mark is:75
0
alsav22
5442 / 4837 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
02.08.2013, 18:25 12
Цитата Сообщение от Ronan Посмотреть сообщение
В нем есть сортировка list::sort().
В нём ещё есть и такая сортировка: list::sort(Compare comp).
Croessmah, дал вам ссылку. Создайте для вашего класса функцию сравнения и сортируйте.
0
Ronan
1 / 1 / 0
Регистрация: 28.06.2013
Сообщений: 29
03.08.2013, 20:01  [ТС] 13
alsav22, уже в который раз спасибо.
На случай если у кого то будет подобная проблема: надо сначала написать компаратор. я его реализовал в класе с которым работаю, тоесть в классе Student написал такое переопридиление:
C++
1
2
3
bool Student::operator() (const Student &a, const Student &b ){
            return a.GetMark()<b.GetMark();
        }
Я перегрузил оператор(), но можно было и другое название. И потом вызов сортировки из main()
C++
1
 list.sort(Student());
0
03.08.2013, 20:01
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.08.2013, 20:01

Разъясните код пжлст(выдает ошибку:cannot convert from 'class std::list<class c_bullet *,class std::allocator<class c_bullet *> >::iterator' to 'int')
Есть такие строки: std::list&lt;c_bullet*&gt; Bullets; ... for(auto i =...

Static std::list
Добрый день, помогите решить проблему. &quot;Каждое статическое поле должно быть...

Вопросы по std::list
1. Как обменять в списке два его элемента? Желательно большое быстродействие :)...


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

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

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