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

Sort vector, сортировка по двум полям структуры - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Удаление элемента односвязного списка http://www.cyberforum.ru/cpp-beginners/thread1235368.html
Здравствуйте. Написал вот такой код. В программе происходит создание списка, вывод его на экран, а так же удаление первого элемента, меньшего заданного числа. Вот как раз с удалением возникла...
C++ Прокомментировать код. QuickSort Напишите пожалуйста как можно подробнее комментарии к каждой строке, а то я точно чайник и мало что понимаю #include <iostream> #include <cstring> using namespace std; void... http://www.cyberforum.ru/cpp-beginners/thread1235352.html
C++ Графический символ ASCII в русской локали (консоль)
Здравствуйте, нужно вывести символ \xB2 (заштрихованный прямоугольник) так все работает, но если объявить setlocale(LC_ALL,"RUS") так как нужна кириллица, то вместо квадратика вопросительный...
C++ Как можно явно вызвать оператор преобразования?
Доброго времени суток Как можно явно вызвать такой оператор преобразования? struct CL { template <class A, class B, class C> operator double() { return 6.6;
C++ Классы - что это? http://www.cyberforum.ru/cpp-beginners/thread1235267.html
Что такое классы? Зачем они нужны? И как их использовать?
C++ Вызов стороннего приложения без полного пути Всем доброго времени суток! Подсобите в следующем вопросе пожалуйста: Язык C++ среда разработки Visual Studio 2012, мне требуется запустить стороннее приложение (.exe) с параметрами, аналогия со... подробнее

Показать сообщение отдельно
Voivoid
675 / 278 / 12
Регистрация: 31.03.2013
Сообщений: 1,339
28.07.2014, 21:33
Я для таких случаев написал такую вот штуку:

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
#pragma once
 
#include <functional>
#include <vector>
 
    template <typename T>
    class chain_comparer {
        typedef std::function<bool( const T&, const T& )> comparer;
 
    public:
        
        //comparer.chain<std::greater>( boost::bind( &person::name, _1 ) );
        template <template <typename> class Comparer, typename Getter>
        chain_comparer& chain( const Getter& getter ) {
            typedef std::remove_reference<std::result_of<Getter(T)>::type>::type result_type;
            return chain( Comparer<result_type>(), getter );
        }
 
        //comparer.chain( std::greater<std::string>(), boost::bind( &person::name, _1 ) );
        template <typename Comparer, typename Getter>
        chain_comparer& chain( const Comparer& comparer, const Getter& getter ) {
            i_comparers.push_back( std::bind( comparer, std::bind( getter, std::placeholders::_1 ), std::bind( getter, std::placeholders::_2 ) ) );
            return *this;
        }
 
        //cmp.chain<std::greater>( &person::name );
        template <template <typename> class Comparer, typename ValType>
        chain_comparer& chain( ValType T::* member ) {
            return chain( Comparer<ValType>(), member );
        }
 
        //comparer.chain( std::greater<std::string>(), &person::name );
        template <typename Comparer, typename ValType>
        chain_comparer& chain( const Comparer& comparer, ValType T::* member ) {
            i_comparers.push_back( std::bind( comparer, std::bind( member, std::placeholders::_1 ), std::bind( member, std::placeholders::_2 ) ) );
            return *this;
        }
 
        bool operator()( const T& lhs, const T& rhs ) {
            for( const auto& comparer : i_comparers ) {
                if( comparer( lhs, rhs ) ) return true;
                if( comparer( rhs, lhs ) ) return false;
            }
 
            return false;
        }
 
    private:
        std::vector<comparer> i_comparers;
    };
Использовать так:

C++
1
2
3
4
    chain_comparer<DATA> comparer;
    comparer.chain<std::less>( &DATA::fir );
    comparer.chain<std::less>( &DATA::sec );
    std::sort( vec.begin(), vec.end(), comparer );
3
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru