Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
sl_k
12 / 12 / 4
Регистрация: 15.04.2010
Сообщений: 61
#1

Отсортировать саб лист используя лямбда фунций

09.08.2013, 19:40. Просмотров 463. Ответов 4
Метки нет (Все метки)

Данн лист из объектов класса и нужно отсортировать часть этого листа. Что то типа:


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class someClass;
 
std::list<someClass> classList;
 
//находим начало саб листа
auto iterMiddle = classList.find_if(classList.begin(), classList.end(), 
                                                //какой нибудь критерий);
 
//отсортируем оставшую часть саб листа
//хотелось бы сделать что то типа такого, но копилятор ругается
std::sort(iterMiddle, classList.end(), [](const someClass& lhs, const someClass& rhs)
                                                     {
                                                            return lhs.a < rhs.a;
                                                     }
 
);
Bash
1
2
3
4
/usr/include/c++/4.3/bits/stl_algo.h(4821): error: no operator "-" matches these
                                                                                     operands
            operand types are: std::_List_iterator<someClass&> - std::_List_iterator<someClass&>
                std::__lg(__last - __first) * 2, __comp);
и еще куча подобных жалоб на несуществующие операторы в someClass.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.08.2013, 19:40
Ответы с готовыми решениями:

Составление фунций с точностью
Составить функцию, которая вычисляет сумму ряда с заданной точностью ε(0&lt;ε&lt;=1) . Считать, что...

Код стандартных библиотечных фунций
Подскажите, пожалуйста, где можно посмотреть исходный код функций стандартных библиотек, например,...

Составление фунций(статистическое распределение памяти)
Составить функцию, которая, получив число А и массив из N целых чисел, анализирует массив. Если...

Возможно ли у семейства фунций exec получить возвращаемое значение?
Возможно ли у семейства фунций exec получить возвращаемое значение? прототип позволяет: int...

Отсортировать числа в файле не используя вспомогательный массив
Нужно отсортировать числа в файле, записанные через пробел, не используя массив. Возникла такая...

4
castaway
Эксперт С++
4929 / 3036 / 453
Регистрация: 10.11.2010
Сообщений: 11,116
Записей в блоге: 10
Завершенные тесты: 1
09.08.2013, 19:46 #2
А ты стандарт С++11 включил?
Код для проверки:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <algorithm>
#include <vector>
 
int main()
{
    int myints[] = {32,71,12,45,26,80,53,33};
    std::vector<int> myvector( myints, myints + 8 );
 
    std::sort( myvector.begin(), myvector.end(), []( const int a, const int b ){ return a < b; } );
 
    for ( std::vector <int>::iterator it = myvector.begin(); it != myvector.end(); ++it ) {
        std::cout << ' ' << *it;
    }
    std::cout << '\n';
 
    return 0;
}
0
sl_k
12 / 12 / 4
Регистрация: 15.04.2010
Сообщений: 61
09.08.2013, 19:51  [ТС] #3
Цитата Сообщение от castaway Посмотреть сообщение
А ты стандарт С++11 включил?
Код для проверки:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <algorithm>
#include <vector>
 
int main()
{
    int myints[] = {32,71,12,45,26,80,53,33};
    std::vector<int> myvector( myints, myints + 8 );
 
    std::sort( myvector.begin(), myvector.end(), []( const int a, const int b ){ return a < b; } );
 
    for ( std::vector <int>::iterator it = myvector.begin(); it != myvector.end(); ++it ) {
        std::cout << ' ' << *it;
    }
    std::cout << '\n';
 
    return 0;
}
Если надо осортировать лист из произвольных элементов от начала и до конца, то
метод листа sort прекрасно работает с лямбда функциями. Вопрос все же в том, чтоб отсортировать саб лист, который содержит объекты произвольного класса.
0
castaway
Эксперт С++
4929 / 3036 / 453
Регистрация: 10.11.2010
Сообщений: 11,116
Записей в блоге: 10
Завершенные тесты: 1
09.08.2013, 19:58 #4
...
0
gray_fox
What a waste!
1553 / 1258 / 166
Регистрация: 21.04.2012
Сообщений: 2,636
Завершенные тесты: 3
09.08.2013, 20:44 #5
Цитата Сообщение от sl_k Посмотреть сообщение
Вопрос все же в том, чтоб отсортировать саб лист, который содержит объекты произвольного класса.
Делается через ж... splice
C++
1
2
3
4
std::list<someClass> toSort;
toSort.splice(std::end(toSort), classList, iterMiddle, std::end(classList));
toSort.sort(/* lambda */);
classList.splice(std::end(classList), toSort);
0
09.08.2013, 20:44
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.08.2013, 20:44

Не используя индексатор массива отсортировать массив по возрастанию
Не используя индексатор массива отсортировать массив по возрастанию.

Отсортировать числа из файла в порядке неубывания используя stl
в текстовом файле записан набор целых чисел. отсортировать эти числа в порядке неубывания. ...

Создать структуру, используя потоки заполнить масив структурами и отсортировать
Помогите, никак не могу закончить програму. Как через поток записать существующие (записаные в...


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

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

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