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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.64
Kosmonit
0 / 0 / 0
Регистрация: 12.04.2011
Сообщений: 8
#1

Предикат для сортировки std::list - C++

11.05.2011, 15:09. Просмотров 1460. Ответов 4
Метки нет (Все метки)

Помогите правильно составить предикат для сортировки std::list
Валит ошибку
WinXP, VC6
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
53
54
55
 #include "stdafx.h"
 #include <list>
 using namespace std;
 
 struct _strMy
 {
 int Id;
 time_t ltime;
 };
 
 typedef list<_strMy> _listMy;
 
 bool sort_my(const _strMy& strMy1, const _strMy& strMy2)
 {
 return strMy1.ltime < strMy1.ltime;
 } 
 
 int main(int argc, char* argv[])
 {
 _strMy strMy;
 _listMy listMy;
 
 strMy.Id = 13;
 strMy.ltime = 123;
 listMy.push_back(strMy);
 
 strMy.Id = 14;
 strMy.ltime = 111;
 listMy.push_back(strMy);
 
 strMy.Id = 15;
 strMy.ltime = 782;
 listMy.push_back(strMy);
 
 for(_listMy::iterator it = listMy.begin(); it != listMy.end(); it++ )
 {
 printf("Id = %d Time = %d\n", it->Id, it->ltime);
 }
 
 //listMy.sort(ClsSortMy());
 //listMy.sort(&ptr_less<_strMy>);
 //sort(listMy.begin(), listMy.end(), LessThan);
 //listMy.sort(listMy.begin(), listMy.end(), LessThan);
 //listMy.sort(mygreater<_strMy>());
 
 listMy.sort(sort_my)
 
 
 for(it = listMy.begin(); it != listMy.end(); it++ )
 {
 printf("Id = %d Time = %d\n", it->Id, it->ltime);
 }
 
 return 0;
 }
 Комментарий модератора 
Используйте теги форматирования кода!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.05.2011, 15:09
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Предикат для сортировки std::list (C++):

Remove_if для std::list - C++
Здравствуйте! Помогите мне разобраться,пожалуйста.Перечитал кучу всего,но так и не понял ,что можно писать в аргументе метода remove_if. ...

Бинарный поиск для std::list - C++
Здравствуйте. Хотел написать бинарный поиск для std::list. Пишу: //Тип coord определён выше std::list&lt;coord&gt;::iterator...

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

Компаратор для сортировки vector<list<struct>> - C++
Помогите, как реализовать компаратор для сортировки vector&lt;list&lt;struct&gt;&gt; ? struct Edge { int i,j,len; }; Массив заполняется...

Предикат сортировки - C++
Объясните в чем разница в использовании: class CompareResID { public: bool operator()(const ResultGroup&amp; d1, const...

Потокобезопасность std::map::end, std::list::end - C++
Собсна сабж, могу ли я без синхронизаций выполнять подобного рода код if (myIter != map.end()) // != list.end() {...} myIter =...

4
ValeryLaptev
Эксперт С++
1041 / 820 / 48
Регистрация: 30.04.2011
Сообщений: 1,659
11.05.2011, 17:58 #2
Ошибки пока не вижу, но первое, что бросается в глаза - подчеркивания спереди. Поскольку у тебя VC++6 - это может быть ОЧЕНЬ чревато. Убери подчеркивания совсем или поставь после имени.
0
Kosmonit
0 / 0 / 0
Регистрация: 12.04.2011
Сообщений: 8
12.05.2011, 09:48  [ТС] #3
Цитата Сообщение от ValeryLaptev Посмотреть сообщение
Ошибки пока не вижу, но первое, что бросается в глаза - подчеркивания спереди. Поскольку у тебя VC++6 - это может быть ОЧЕНЬ чревато. Убери подчеркивания совсем или поставь после имени.
Нет, не работает, выдает одну и ту же ошибку:
Compiling...
SortList.cpp
H:\0_Tools\0_Projects\VC\VC6\0_Debugging\SortList\SortList.cpp(56) : error C2664: 'void __thiscall std::list<struct defstrMy,class std::allocator<struct defstrMy> >::sort(struct std::greater<struct defstrMy>)' : cannot convert parameter 1 from 'bool
(const struct defstrMy &,const struct defstrMy &)' to 'struct std::greater<struct defstrMy>'
No constructor could take the source type, or constructor overload resolution was ambiguous
Error executing cl.exe.

Добавлено через 1 минуту
Compiling...
SortList.cpp
H:\0_Tools\0_Projects\VC\VC6\0_Debugging\SortList\SortList.cpp(105) : error C2664: 'void __thiscall std::list<struct _strMy,class std::allocator<struct _strMy> >::sort(struct std::greater<struct _strMy>)' : cannot convert parameter 1 from 'bool (con
st struct _strMy &,const struct _strMy &)' to 'struct std::greater<struct _strMy>'
No constructor could take the source type, or constructor overload resolution was ambiguous
Error executing cl.exe.
0
ValeryLaptev
Эксперт С++
1041 / 820 / 48
Регистрация: 30.04.2011
Сообщений: 1,659
12.05.2011, 09:54 #4
Понятно.
Ошибка означает, что методу сортировки нельзя функцию-предикат подсовывать.
Нужно сделать функтор - struct std::greater<struct defstrMy>
0
Kosmonit
0 / 0 / 0
Регистрация: 12.04.2011
Сообщений: 8
12.05.2011, 10:01  [ТС] #5
Цитата Сообщение от ValeryLaptev Посмотреть сообщение
Понятно.
Ошибка означает, что методу сортировки нельзя функцию-предикат подсовывать.
Нужно сделать функтор - struct std::greater<struct defstrMy>
Каким образом? Можете кусок кода написать?
0
12.05.2011, 10:01
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.05.2011, 10:01
Привет! Вот еще темы с ответами:

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

Сортировка std::list - C++
Есть такой фрагмент програми. Создаю функцию для сортировки list. Вроде все правильно. В класе перегружены оператори &lt; i =. Не знаю что...

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

Static std::list - C++
Добрый день, помогите решить проблему. &quot;Каждое статическое поле должно быть проинициализировано до main() явным образом&quot; - как я помню...


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

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

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