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

Отсортировать контейнер map по значению элементов - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ сортировка с помошью итераторов http://www.cyberforum.ru/cpp-beginners/thread272187.html
Дана последовательность действительных чисел. Необходимо используя алгоритм сортировки вставками сформировать новую последовательность, упорядоченную: а) по возрастанию; б) по убыванию. Указания. 1. Для представления последовательности необходимо использовать библиотечный шаблон vector. 2. Для доступа к элементам последовательности необходимо использовать итераторы. 3. Ввод, вывод и...
C++ Приложения под Windows Подскажите что нужно ещё учить помимо C++, чтоб писать приложения под винд. ? Дело в том, что основы С++ я уже освоил и не знаю за что теперь браться, чтоб программировать под винд. http://www.cyberforum.ru/cpp-beginners/thread272173.html
C++ сортировка строк методом выбора
ввести с клавиатуры значения элементов символьного двумерного массива. ОТСОРТИРОВАТЬ ПО возрастанию (МЕТОДОМ ВЫБОРА) элементы тех строк, которые содержат символ "/". Добавлено через 1 минуту #include <stdio.h> #include <conio.h> #include <stdlib.h> void main() { char A;
ИНТЕРЕСНОЕ)) C++
Cантехнік Петро був найнятий, щоб прокласти трубу водопостачання між двома точками міста. Мапу міста можна представити у вигляді прямокутника розміром R × S, що складається з квадратних клітинок. У деяких клітинках трубу розміщувати не можна. Петро повинен з'єднати за допомогою труби місце, розташоване безпосередньо над верхньою лівою клітинкою, і місце, розташоване прямо під нижньою правою...
C++ Cортировка двусвязного списка http://www.cyberforum.ru/cpp-beginners/thread272167.html
Ну, в общем задание в названии. Нужно отсортировать двусвязный список, методом пузырька. Сортировку-то я эту знаю. Но вот проблема, я не могу разобраться, как в двусвязном списке перейти к следующему элементу, и как сделать указатель на текущий. Да и вообще с двусвязными как-то не ладится) struct Element { Element* Prev; Element*...
C++ Заполнить матрицы по правилу Доброго времени суток. Вот встал перед проблемой при работе с матрицей. Необходимо заполнить матрицу 5х5 следующим образом 1 1 1 1 1__или__x 1 1 1 x 0 1 1 1 0_______0 x 1 x 0 0 0 1 0 0_______0 0 x 0 0 0 1 1 1 0_______0 x 1 x 0 1 1 1 1 1_______0 0 0 0 0 Исходников не прошу, хочу просто услышать мысли по этому поводу, алгоритмы реализации, мб примеры, а то щя по книжке С учу а там... подробнее

Показать сообщение отдельно
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
09.04.2011, 23:41     Отсортировать контейнер map по значению элементов
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
#include <deque>
#include <utility>
#include <algorithm>
#include <cstring>
#include <vector>
#include <functional>
#include <boost/format.hpp>
#include <iostream>
 
typedef char*                       Element;
typedef std::pair<int, Element>     Pair;
typedef std::deque<Pair>            Container;
 
std::vector<Element> arr
                  = { 
                      "hello",
                      "world",
                      "where",
                      "are",
                      "hello",
                      "you",
                      "are", "you" 
                    };     
 
bool comp_pair( const Pair& first, const Pair& second )
{
   
   int res = strcmp( first.second, second.second );
   return res <= 0; 
}
 
int insert( Container& container, const Element& element )
{
   
   Pair pair = { 1, element };
   Container::iterator it = 
      std::upper_bound( container.begin(), container.end(), pair,
                        comp_pair );
   if( it == container.end() ||
       0 != strcmp( it->second, element ) )
   {
      container.insert( it, pair );
   } 
   else
   {
      ++it->first;
   }   
   return it->first;
}
 
int main()
{
    Container dict;
    std::for_each( arr.begin(), arr.end(), [&dict](const Element el)
    {
       insert( dict, el );
    });
    std::for_each( dict.begin(), dict.end(), [](const Pair& pair)
    {
       std::cout << boost::format( "[%3d] - %s" )
                 % pair.first % pair.second
                 << std::endl;    
    });    
}
http://liveworkspace.org/code/649bd1...18c2ec66ac4980

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