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

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

Восстановить пароль Регистрация
 
sl_k
12 / 12 / 0
Регистрация: 15.04.2010
Сообщений: 61
09.08.2013, 19:40     Отсортировать саб лист используя лямбда фунций #1
Данн лист из объектов класса и нужно отсортировать часть этого листа. Что то типа:


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.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.08.2013, 19:40     Отсортировать саб лист используя лямбда фунций
Посмотрите здесь:

C++ Классы и сабклассы
C++ Используя функции сформировать одномерный массив и отсортировать по возрастанию только те элементы массива, которые являются простыми числами
C++ Составление фунций(статистическое распределение памяти)
Составление фунций с точностью C++
C++ создать и отсортировать двумерный массив по строкам используя алгоритм сортировки вставкой
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
castaway
Эксперт С++
4844 / 2983 / 367
Регистрация: 10.11.2010
Сообщений: 11,020
Записей в блоге: 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;
}
sl_k
12 / 12 / 0
Регистрация: 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 прекрасно работает с лямбда функциями. Вопрос все же в том, чтоб отсортировать саб лист, который содержит объекты произвольного класса.
castaway
Эксперт С++
4844 / 2983 / 367
Регистрация: 10.11.2010
Сообщений: 11,020
Записей в блоге: 10
Завершенные тесты: 1
09.08.2013, 19:58     Отсортировать саб лист используя лямбда фунций #4
...
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 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);
Yandex
Объявления
09.08.2013, 20:44     Отсортировать саб лист используя лямбда фунций
Ответ Создать тему
Опции темы

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