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

Отсортировать multimap по pair->second - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Обработка строк с использованием указателей: вывести слова в два столбика, по четности их длины http://www.cyberforum.ru/cpp-beginners/thread1206861.html
Дана строка. Распечатать слова в два столбика. 1 столбик — слова, имеющие четное количество букв, а второй — нечётное. Добавлено через 42 секунды help! help!
C++ Сформировать матрицу 11*3 и поменять местами столбец, содержащий минимальный элемент, с первым столбцом помогите пожалуйста с заданием: из 33 положительных, отрицательных и нулевых значений чисел сформируйте матрицу 11*3. поменяйте местами столбец содержащий минимальный элемент, с первым столбцом, выдайте преобразованную матрицу. предусмотреть если минимум находится в 1 столбце. как вижу это я: 1) задание матрицы 2) поиск минимального значения 3)элемент1 записываем в память столбца н 4)... http://www.cyberforum.ru/cpp-beginners/thread1206858.html
Определить, попадает ли точка в область C++
определить, попадает ли точка с заданными координатами х,у в заштрихованную область. условие попадания точки в заштрихованную область записать одним предложением. область 1: x*x+y*y>=4; x<=-2, y>=2; область 2: x-2y<=0; 0<x<=2, -1<y<=0 подобные задачи встречались здесь на сайте, подобно им я попробовала сделать программу... #include<stdio.h> #include<conio.h> #include<math.h>
C++ Поиск элемента одной строки во второй с последующим исключением
Дано две строки, нужно сравнить и убрать из первой символы которые есть во второй. Например: 1: abcdeeedsasa 2: gjmxvde result: abcsasa Вот мой вариант кода(метод класса), но цикл завершается сразу после того как найдет одинаковый символ, т.е. 1: abcdeeedsasa 2: gjmxvde
C++ Массив структур или объект http://www.cyberforum.ru/cpp-beginners/thread1206847.html
есть класс class myclass { struct mystruct { int num;//номер char name;//имя }; }; Допустим, 10 сотрудников.
C++ Определить число листьев на каждом уровне дерева Нужно составить такую функцию. Именно на каждом отдельном уровне, а не по дереву вообще. подробнее

Показать сообщение отдельно
Mr.X
Эксперт С++
 Аватар для Mr.X
2796 / 1572 / 246
Регистрация: 03.05.2010
Сообщений: 3,649
14.06.2014, 21:54     Отсортировать multimap по pair->second
Можно при вставке упорядочивать:
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
#include <algorithm>
#include <complex>
#include <cstdlib>
#include <ctime>
#include <functional>
#include <iostream>
#include <iterator>
#include <algorithm>
#include <map>
#include <vector>
/////////////////////////////////////////////////////////////////////////////////////////
typedef std::pair       < int, int  >   T_iipair;
typedef std::vector     < T_iipair  >   T_iivect;
typedef std::multimap   < int, int  >   T_iimult;
typedef std::complex    < int       >   T_iicomplex;
/////////////////////////////////////////////////////////////////////////////////////////
void  print_iipair( T_iipair    const   &   iipair )
{
    std::cout   <<  T_iicomplex
                        (
                            iipair.first,
                            iipair.second
                        )
 
                <<  std::endl;
}
/////////////////////////////////////////////////////////////////////////////////////////
void  print_iimult( T_iimult    const   &   iimult )
{
    std::for_each
        (
            iimult.begin    (),
            iimult.end      (),
            print_iipair
        );
}
/////////////////////////////////////////////////////////////////////////////////////////
template
    <
        typename    TT_key,
        typename    TT_mapped_type,
        typename    TT_pair_compare     =   typename    std::less
                                                            <
                                                                std::pair< TT_key,  TT_mapped_type >
                                                            >
    >
struct  T_insert_with_ordering_in_multimap
{
    //-----------------------------------------------------------------------------------
    typename    std::multimap   <TT_key, TT_mapped_type>    &   mult_;
    TT_pair_compare   const                                 &   pair_compare_;
    //-----------------------------------------------------------------------------------
    T_insert_with_ordering_in_multimap
        (
            typename    std::multimap   <TT_key, TT_mapped_type>    &   mult,
            TT_pair_compare   const                                 &   pair_compare    =   TT_pair_compare()
        )
        :
        mult_           ( mult ),
        pair_compare_   ( pair_compare )
    {}
    //-----------------------------------------------------------------------------------
    void  operator()
        (
            std::pair   <TT_key, TT_mapped_type>    const   &   pair
        )
    {
        auto    lower_bound_it  =   mult_.lower_bound( pair.first );
 
        while   (
                        lower_bound_it  !=  mult_.end()
                    &&  pair_compare_
                            (
                                *lower_bound_it,
                                pair
                            )
                )
        {
            ++lower_bound_it;
        }
        mult_.insert( lower_bound_it, pair );
    }
    //-----------------------------------------------------------------------------------
};
/////////////////////////////////////////////////////////////////////////////////////////
struct  T_generate_rand_pair
{
    //-----------------------------------------------------------------------------------
    int     lower_bound_;
    int     upper_bound_;
    //-----------------------------------------------------------------------------------
    T_generate_rand_pair
        (
            int     lower_bound,
            int     upper_bound
        )
        :
        lower_bound_( lower_bound ),
        upper_bound_( upper_bound )
    {}
    //-----------------------------------------------------------------------------------
    T_iipair    operator() ()
    {
        return  std::make_pair
                    (
                        generate_int(),
                        generate_int()
                    );
    }
    //-----------------------------------------------------------------------------------
    int  generate_int()
    {
        return  rand() % ( upper_bound_ - lower_bound_ + 1 )    +   lower_bound_;
    }
    //-----------------------------------------------------------------------------------
};
/////////////////////////////////////////////////////////////////////////////////////////
void  check_order_of_pairs_in( T_iimult     const   &   iimult )
{
    auto    it  =   std::adjacent_find
                        (
                            iimult.begin            (),
                            iimult.end              (),
                            std::greater<T_iipair>  ()
                        );
 
    if  (
            it  ==  iimult.end()
        )
    {
        std::cout   <<  "Пары в мэпе упорядочены.";
    }
    else
    {
        int     n   =   std::distance
                            (
                                iimult.begin(),
                                it
                            );
 
        std::cout   <<  n + 1
                    <<  "-я пара ";
 
        print_iipair( *it );
        std::cout   <<  "больше следующей.";
    }//else
    std::cout   <<  std::endl;
}
/////////////////////////////////////////////////////////////////////////////////////////
int  main()
{
    std::locale::global(std::locale(""));
    srand(unsigned(time(0)));
 
    for(;;)
    {
        int     n   =   20;
        int     L   =   1;
        int     R   =   5;
 
        T_iivect    iivect;
 
        std::generate_n
            (
                std::back_inserter( iivect ),
                n,
                T_generate_rand_pair( L, R )
            );
 
        T_iimult    iimult;
 
        std::copy
            (
                iivect.begin    (),
                iivect.end      (),
                std::inserter
                    (
                        iimult,
                        iimult.begin()
                    )
            );
 
        std::cout   <<  "Обычная вставка в мэп."
                    <<  std::endl;
        print_iimult( iimult );
        std::cout   <<  std::endl;
        check_order_of_pairs_in( iimult );
 
        iimult.clear();
 
        T_insert_with_ordering_in_multimap<int, int>  insert_with_ordering_in_multimap( iimult );
 
        std::for_each
            (
                iivect.begin    (),
                iivect.end      (),
                insert_with_ordering_in_multimap
            );
 
        std::cout   <<  std::endl
                    <<  std::endl
                    <<  "Упорядоченная вставка в мэп."
                    <<  std::endl;
        print_iimult( iimult );
        std::cout   <<  std::endl;
        check_order_of_pairs_in( iimult );
 
        system( "pause" );
    }//for
}
 
Текущее время: 06:00. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru