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

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

Войти
Регистрация
Восстановить пароль
 
sl_k
12 / 12 / 0
Регистрация: 15.04.2010
Сообщений: 61
#1

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

09.08.2013, 19:40. Просмотров 429. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Отсортировать саб лист используя лямбда фунций (C++):

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

Код стандартных библиотечных фунций - C++
Подскажите, пожалуйста, где можно посмотреть исходный код функций стандартных библиотек, например, math.h, string.h? Не интерфейс функций,...

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

Возможно ли у семейства фунций exec получить возвращаемое значение? - C++
Возможно ли у семейства фунций exec получить возвращаемое значение? прототип позволяет: int execl(const char *path, const char *arg,...

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

Создать структуру, используя потоки заполнить масив структурами и отсортировать - C++
Помогите, никак не могу закончить програму. Как через поток записать существующие (записаные в файле данные) в масив? #include &lt;...

4
castaway
Эксперт С++
4884 / 3019 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 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 / 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 прекрасно работает с лямбда функциями. Вопрос все же в том, чтоб отсортировать саб лист, который содержит объекты произвольного класса.
0
castaway
Эксперт С++
4884 / 3019 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
09.08.2013, 19:58 #4
...
0
gray_fox
What a waste!
1521 / 1226 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.08.2013, 20:44
Привет! Вот еще темы с ответами:

создать и отсортировать двумерный массив по строкам используя алгоритм сортировки вставкой - C++
создать и отсортировать двумерный массив по строкам используя алгоритм сортировки вставкой

Отсортировать большое число элементов за минимальное время, используя битовый массив - C++
Всем привет! Вот, получил задание такое: написать сортировку большого числа элементов за минимальное время, используя битовый массив....

Не используя других массивов, отсортировать положительные элементы массива в порядке возрастания - C++
Нужно задать массив В целых чисел. Не используя других массивов, отсортировать положительные элементы массива в порядке возрастания, а...

Отсортировать элементы одномерного массива по возрастанию, используя метод прямого подбора - C++
Составить программу, позволяющую отсортировать элементы одномерного массива по возрастанию, используя метод прямого подбора (через поиск...


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

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

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