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

Сортировка std::list - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
Ronan
1 / 1 / 0
Регистрация: 28.06.2013
Сообщений: 29
02.08.2013, 04:53     Сортировка std::list #1
Есть такой фрагмент програми. Создаю функцию для сортировки 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;
            }
        }
 
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.08.2013, 04:53     Сортировка std::list
Посмотрите здесь:

Вопросы по std::list C++
C++ Вопрос по std::list
Передача std::list<> в функцию C++
C++ Сортировка std::list ошибка компиляции algorithm 3868 error C2784
C++ Remove_if для std::list
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,915
Записей в блоге: 2
Завершенные тесты: 1
02.08.2013, 05:12     Сортировка std::list #2
std::list::sort
http://www.cplusplus.com/reference/list/list/sort/
Ronan
1 / 1 / 0
Регистрация: 28.06.2013
Сообщений: 29
02.08.2013, 10:28  [ТС]     Сортировка std::list #3
Croessmah, я видел ето, но я сортирую объекти, и мне нужно задать параметр по которому будет проходть сортировка. Объект у меня получает 3 параметра: Student(const string &name,const int age,const int mark); Я хочу просортировать по 3 параметру. как мне это зделать с помощью функции sort? Мне кажеться віход тольо написать свою функцию, адля этого мне надо доступ ко всем елементам списка.
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
02.08.2013, 10:43     Сортировка std::list #4
Цитата Сообщение от Ronan Посмотреть сообщение
Мне кажеться віход тольо написать свою функцию
Свою функцию сравнения, но не сортировки.
Ronan
1 / 1 / 0
Регистрация: 28.06.2013
Сообщений: 29
02.08.2013, 10:51  [ТС]     Сортировка std::list #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;
              }
 
 
}
но вот в функии сортировки списка почему то не сортирует, хотя все зделано по аналогии
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
02.08.2013, 11:03     Сортировка std::list #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, хранящих КОПИИ двух элементов из списка?
Ronan
1 / 1 / 0
Регистрация: 28.06.2013
Сообщений: 29
02.08.2013, 11:12  [ТС]     Сортировка std::list #7
Kuzia domovenok, да канешно думаю, если б не думал то не делал так. я еще не знаю всего про с++, по етому и сижу в теме с++ для начинающих. Ы если так нельзя так как мне посортировать список?????
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.08.2013, 17:04     Сортировка std::list #8
Цитата Сообщение от Ronan Посмотреть сообщение
так как мне посортировать список?????
Для начала нужно видеть, что он из себя представляет. Это же не list STL?
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
02.08.2013, 17:23     Сортировка std::list #9
Цитата Сообщение от alsav22 Посмотреть сообщение
Это же не list STL?
почему это? мне казалось, тема именно об STL!
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.08.2013, 17:57     Сортировка std::list #10
Разве в list нет сортировки?
Ronan
1 / 1 / 0
Регистрация: 28.06.2013
Сообщений: 29
02.08.2013, 18:21  [ТС]     Сортировка std::list #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
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.08.2013, 18:25     Сортировка std::list #12
Цитата Сообщение от Ronan Посмотреть сообщение
В нем есть сортировка list::sort().
В нём ещё есть и такая сортировка: list::sort(Compare comp).
Croessmah, дал вам ссылку. Создайте для вашего класса функцию сравнения и сортируйте.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.08.2013, 20:01     Сортировка std::list
Еще ссылки по теме:

Static std::list C++
Реализация std::list, сложность list::size() C++
Непосредственное удаление из std::list C++

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

Или воспользуйтесь поиском по форуму:
Ronan
1 / 1 / 0
Регистрация: 28.06.2013
Сообщений: 29
03.08.2013, 20:01  [ТС]     Сортировка std::list #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());
Yandex
Объявления
03.08.2013, 20:01     Сортировка std::list
Ответ Создать тему
Опции темы

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