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

Сортировка списка с использованием std::sort - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 5.00
yol
10 / 10 / 0
Регистрация: 13.10.2012
Сообщений: 155
06.02.2014, 04:04     Сортировка списка с использованием std::sort #1
Что-то не получается отсортировать целочисленные данные расположенные в списке, компилятор (VS10) жутко ругается. В чем может быть дело?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <iostream>
#include <conio.h>
#include <string>
#include <list>
#include <algorithm>
 
using namespace std;
 
template <class T>
class Hot
{
public:
    void operator()(const T &obj){cout<<" "<<obj;}
 
    //bool operator< (T const &lhs, T const &rhs){return (lhs<rhs)}
};
 
 
typedef list<int> integer;
typedef Hot<int> print;
//typedef Hot<int> sorts;
 
int main()
{
    setlocale(LC_ALL, "rus");
 
    int val=0;
    integer num;
    print doPrint;
    //sorts doSort;
    cout<<"#Создаем список на 30 элементов."<<endl;
 
    cout<<"\n#Записываем числа в список:"<<endl;
    for(int i=0; i<30; i++)
    {
        val=rand()%100+1;
        num.push_back(val);
        cout<<" "<<val;
    }
 
    cout<<"\n#Выводим содержимое списка:"<<endl;
    for_each(num.begin(), num.end(), doPrint);
 
    cout<<"\n#Сортируем список."<<endl;
    sort(num.begin(), num.end());
 
    cout<<"\n#Выводим содержимое списка после сортировки:"<<endl;
    for_each(num.begin(), num.end(), doPrint);
 
    getch();
    return 0;
}
Под спойлером ошибки:
Кликните здесь для просмотра всего текста
Ошибка 12 error C2676: бинарный "-": "std::_List_iterator<_Mylist>" не определяет этот оператор или преобразование к типу приемлемо к встроенному оператору c:\program files (x86)\microsoft visual studio 10.0\vc\include\algorithm 3642
Ошибка 13 error C2780: void std::_Sort(_RanIt,_RanIt,_Diff,_Pr): требует аргументов: 4, имеется: 3 c:\program files (x86)\microsoft visual studio 10.0\vc\include\algorithm 3642
Ошибка 7 error C2784: _Base1::difference_type std::operator -(const std::_Revranit<_RanIt,_Base> &,const std::_Revranit<_RanIt2,_Base2> &): не удалось вывести аргумент шаблон для "const std::_Revranit<_RanIt,_Base> &" из "std::_List_iterator<_Mylist>" c:\program files (x86)\microsoft visual studio 10.0\vc\include\algorithm 3642
Ошибка 8 error C2784: _Base1::difference_type std::operator -(const std::_Revranit<_RanIt,_Base> &,const std::_Revranit<_RanIt2,_Base2> &): не удалось вывести аргумент шаблон для "const std::_Revranit<_RanIt,_Base> &" из "std::_List_iterator<_Mylist>" c:\program files (x86)\microsoft visual studio 10.0\vc\include\algorithm 3642
Ошибка 9 error C2784: _Base1::difference_type std::operator -(const std::_Revranit<_RanIt,_Base> &,const std::_Revranit<_RanIt2,_Base2> &): не удалось вывести аргумент шаблон для "const std::_Revranit<_RanIt,_Base> &" из "std::_List_iterator<_Mylist>" c:\program files (x86)\microsoft visual studio 10.0\vc\include\algorithm 3642
Ошибка 10 error C2784: _Base1::difference_type std::operator -(const std::_Revranit<_RanIt,_Base> &,const std::_Revranit<_RanIt2,_Base2> &): не удалось вывести аргумент шаблон для "const std::_Revranit<_RanIt,_Base> &" из "std::_List_iterator<_Mylist>" c:\program files (x86)\microsoft visual studio 10.0\vc\include\algorithm 3642
Ошибка 11 error C2784: _Base1::difference_type std::operator -(const std::_Revranit<_RanIt,_Base> &,const std::_Revranit<_RanIt2,_Base2> &): не удалось вывести аргумент шаблон для "const std::_Revranit<_RanIt,_Base> &" из "std::_List_iterator<_Mylist>" c:\program files (x86)\microsoft visual studio 10.0\vc\include\algorithm 3642
Ошибка 2 error C2784: reverse_iterator<_RanIt>::difference_type std::operator -(const std::reverse_iterator<_RanIt> &,const std::reverse_iterator<_RanIt2> &): не удалось вывести аргумент шаблон для "const std::reverse_iterator<_RanIt> &" из "std::_List_iterator<_Mylist>" c:\program files (x86)\microsoft visual studio 10.0\vc\include\algorithm 3642
Ошибка 3 error C2784: reverse_iterator<_RanIt>::difference_type std::operator -(const std::reverse_iterator<_RanIt> &,const std::reverse_iterator<_RanIt2> &): не удалось вывести аргумент шаблон для "const std::reverse_iterator<_RanIt> &" из "std::_List_iterator<_Mylist>" c:\program files (x86)\microsoft visual studio 10.0\vc\include\algorithm 3642
Ошибка 4 error C2784: reverse_iterator<_RanIt>::difference_type std::operator -(const std::reverse_iterator<_RanIt> &,const std::reverse_iterator<_RanIt2> &): не удалось вывести аргумент шаблон для "const std::reverse_iterator<_RanIt> &" из "std::_List_iterator<_Mylist>" c:\program files (x86)\microsoft visual studio 10.0\vc\include\algorithm 3642
Ошибка 5 error C2784: reverse_iterator<_RanIt>::difference_type std::operator -(const std::reverse_iterator<_RanIt> &,const std::reverse_iterator<_RanIt2> &): не удалось вывести аргумент шаблон для "const std::reverse_iterator<_RanIt> &" из "std::_List_iterator<_Mylist>" c:\program files (x86)\microsoft visual studio 10.0\vc\include\algorithm 3642
Ошибка 6 error C2784: reverse_iterator<_RanIt>::difference_type std::operator -(const std::reverse_iterator<_RanIt> &,const std::reverse_iterator<_RanIt2> &): не удалось вывести аргумент шаблон для "const std::reverse_iterator<_RanIt> &" из "std::_List_iterator<_Mylist>" c:\program files (x86)\microsoft visual studio 10.0\vc\include\algorithm 3642
Предупреждение 1 warning C4996: 'getch': The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: _getch. See online help for details. g:\ucheba\programs\list\list\main.cpp 58
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.02.2014, 04:04     Сортировка списка с использованием std::sort
Посмотрите здесь:

C++ std::sort()
Сортировка индексов алгоритмом std::sort C++
Сортировка массива структур по выбранному полю с помощью алгоритма std::sort C++
std::sort + std::lower_bound C++
Сортировка массива с использованием алгоритма стандартной библиотеки шаблонов Sort() C++
Отличие std::sort От std::qsort C++
C++ std::sort
Сортировка массива c++ std :: sort() C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vovacreme
-16 / 61 / 13
Регистрация: 14.01.2014
Сообщений: 145
06.02.2014, 04:39     Сортировка списка с использованием std::sort #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Зачем ты полез в <algorithm>, если в контейнере list уже определена функция сортировки std::list::sort. Меняем
C++
1
sort(num.begin(), num.end());
на
C++
1
integer.sort()
Добавлено через 11 минут
Цитата Сообщение от vovacreme Посмотреть сообщение
Зачем ты полез в <algorithm>, если в контейнере list уже определена функция сортировки std::list::sort. Меняем
C++
1
sort(num.begin(), num.end());
на
C++
1
integer.sort()
А версия sort из <algorithm> не работает для контейнера list, потому что его итераторы не обеспечивают произвольный доступ к элементам, в которых, как раз таки нуждается функция sort.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4919 / 2662 / 243
Регистрация: 29.11.2010
Сообщений: 7,402
06.02.2014, 05:14     Сортировка списка с использованием std::sort #3
Если список здесь используется в контексте лишь в значении "набор" и не обяхует использовать соответствующий контейнер или схожий с ним по функционалу, то рекомендовал бы использовать либо vector (совместо с std::sort), либо std::set (тогда даже сортировать не нужно).

Преимущества списка (константная по времени вставка в любое место) здесь вы не используете все равно.
Yandex
Объявления
06.02.2014, 05:14     Сортировка списка с использованием std::sort
Ответ Создать тему
Опции темы

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