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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 25, средняя оценка - 4.96
WASAW
3 / 3 / 0
Регистрация: 10.11.2009
Сообщений: 102
#1

list sort() - C++

21.11.2011, 21:28. Просмотров 3520. Ответов 6
Метки нет (Все метки)

Подскажите пожалуйста.
Есть упрощенный класс
C++
1
2
3
4
5
6
7
8
class NOTE 
    {
    public:
        char name[m];
        char surname[m];
        char phoneNumber[12];
        int birthday[3];
}
и создается список по шаблону
C++
1
list <NOTE> L;
Подскажите как реализовать(вроде можно через предикат, но я не понимаю как) L->sort() для данного списка, чтобы отсортировать записи по фамилии(surname)
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.11.2011, 21:28
Здравствуйте! Я подобрал для вас темы с ответами на вопрос list sort() (C++):

(STL LIST SORT) Сортировка по некольким критериям - C++
Здравствуйте! Столкнулся с такой проблемой при сортировке списка. %-) Есть структура: struct PackObject { bool ...

Не работает sort с предикатом для list в VS2010 - C++
Компилит, но в ходе выполнения ошибка. http://i67.***********/big/2014/1130/0c/ff16385e785d46f0ae1e155ed656ec0c.jpg Функция сравнения: ...

Список(List) как отсортировать по убыванию используя функции reverse(); sort(); ао убыванию - C++
Нужно отсортировать список по убыванию используя функции reverse(); и sort(); если можно фул прогу бо завтыкал тему чёто)))))

Ошибка при компиляции undefined reference to `List<int>::List()'| - C++
Доброго времени суток=) столкнулась с такой проблемой нужно написать шаблон класса. При компиляции выдает ошибку undefined reference to...

у меня созданы 2 фаила - один с классом (называется list.h), а другой с реализациями функций (list.cpp). - C++
у меня созданы 2 фаила - один с классом (называется list.h), а другой с реализациями функций (list.cpp). хочу создать клиентский фаил...

Записать в файл list (очередь) объектов, в которых содержатся строки string, и считать с файла обратно в list - C++
Извините подскажите пожалуйста, как записать list(очередь) объектов в которых содержаться string, и считать с файла обратно в list;...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
OstapBender
583 / 521 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
21.11.2011, 21:34 #2
C++
1
2
3
4
5
bool listPred(NOTE n1, NOTE n2) {
return strcmp(n1.surname,n2.surname);
}
 
std::sort(L.begin(),L.end(),listPred);
0
WASAW
3 / 3 / 0
Регистрация: 10.11.2009
Сообщений: 102
21.11.2011, 21:51  [ТС] #3
К сожалению данный вариант выдает ошибку, что error C2065: listPred: необъявленный идентификатор, хотя я добавил в класс
0
Сыроежка
Заблокирован
21.11.2011, 22:01 #4
Цитата Сообщение от WASAW Посмотреть сообщение
Подскажите пожалуйста.
Есть упрощенный класс
C++
1
2
3
4
5
6
7
8
class NOTE 
    {
    public:
        char name[m];
        char surname[m];
        char phoneNumber[12];
        int birthday[3];
}
и создается список по шаблону
C++
1
list <NOTE> L;
Подскажите как реализовать(вроде можно через предикат, но я не понимаю как) L->sort() для данного списка, чтобы отсортировать записи по фамилии(surname)
У вас есть две возможности. Либо для вашего класса определить оператор-функцию operator < и тогда вызывать метод класса std::list sort без предиката (нельзя вызывать обобщенный алгоритм std::sort, так как он требует итератор произвольного доступа, а списки не имеют такого итератора), либо написать любую функцию, подобную оператор-функции, и тогда вызывать метод sort с предикатом.

Пример оператор функции


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
#include   <list>
#include   <cstring>
 
 
class NOTE 
    {
    public:
        char name[m];
        char surname[m];
        char phoneNumber[12];
        int birthday[3];
};
 
bool operator <( const NOTE &x, const NOTE &y )
{
   return ( std::strcmp( x.surname, y.surname ) < 0 );
}
 
int main()
{
   std::list<NOTE> L;
   ...
 
   L.sort( L.begin(), L.end() );
}
0
WASAW
3 / 3 / 0
Регистрация: 10.11.2009
Сообщений: 102
21.11.2011, 22:27  [ТС] #5
error C2601: operator <: недопустимые локальные определения функций

error C2660: std::list<_Ty>::sort: функция не принимает 2 аргументов
0
OstapBender
583 / 521 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
22.11.2011, 00:16 #6
код полностью покажи.
0
Сыроежка
Заблокирован
22.11.2011, 00:23 #7
Цитата Сообщение от WASAW Посмотреть сообщение
error C2601: operator <: недопустимые локальные определения функций

error C2660: std::list<_Ty>::sort: функция не принимает 2 аргументов
\

Может быть я поспешил в функцию-член класса list вставлять два итератора. Скорей всего она сортирует весь список. Так что итераторы в качестве аргументов следует убрать.

Что касается первой ошибки, то нужно смотреть, что вы там написали.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.11.2011, 00:23
Привет! Вот еще темы с ответами:

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

Работа с STL list + пропись List.h - C++
Здравствуйте! Помогите, пожалуйста, разобраться с STL list. Нужно сделать программу в которой будет содержаться класс Student, прописать...

Преобразование списка list в *list - C++
Здравствуйте я создал список (массив списков), но не могу вытащить элементы этого списка (т.е. , к примеру : mas=список из несколько...

sort() - C++
пожалуйста напишите несколько примеров,с перегруженными версиями sort? vector&lt;int&gt; vec; vec.push_back(100); vec.push_back(10); ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
22.11.2011, 00:23
Ответ Создать тему
Опции темы

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