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

сортировка в multimap - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ warning strtok http://www.cyberforum.ru/cpp-beginners/thread365494.html
Пишу в 10 студии: char* bla = strtok("bla bla bla", " "); Выдаёт варнинг: This function or variable may be unsafe. Consider using strtok_s instead.... И пры выполнении программы на этой строке...
C++ Ошибка "C2065: cin: необъявленный идентификатор" Задан исходный код лабораторной работы по программированию. Нужно модифицировать код по определенным правилам (в зависимости от варианта). Но при попытке скомпилировать в Visual Studio 2010 выдает... http://www.cyberforum.ru/cpp-beginners/thread365493.html
C++ Чтение файла как hex
Как открыть файл в 16ричном виде? Насколько я понял это средствами только с++ невозможно ... или всё же возможно? Вообще хотелось бы написать небольшую программку которая будет сохранять из файла с...
C++ Разбор задания
Добрый вечер уважаемые эксперты! Есть следующее задание: составить двусвязный список объектов класса описывающего студента (Ф.И.О. номер группы и т.д.) и найти однофамильцев. Подскажите пожалуйста,...
C++ Виртуальные методы http://www.cyberforum.ru/cpp-beginners/thread365484.html
Здраствуйте , вот писал виртуальный метод доступа но почему то не получаеться , подскажите почему ??? заранее спасибо #include<iostream> using namespace std; class A { public: A(); ...
C++ Задачи на графы Напишите плз список интересных и популярных задач на графы. Ну или ссылку. подробнее

Показать сообщение отдельно
xAtom
917 / 742 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
13.10.2011, 04:00
Цитата Сообщение от Mut Посмотреть сообщение
есть ли возможность это организовать стандартными средствами библиотеки STL
Нет, multimap и так содержит в себе функционал сортировки по ключам при вставке нового элемента.
Цитата Сообщение от Mut Посмотреть сообщение
или нужно писать алгоритм для сортировки структуры?
Вот посмотри код ниже прикрутил сортировку для структуры выбрал поле с числовым значением.
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
#include <iostream>
#include <map>
using namespace std;
 
struct hero {
   char name[16];
   int  age; // сортировка будет производиться по этому полю
   hero(void) {}
   hero(char* name, int age) {
      strcpy(this->name, name);
      this->age = age;
   }
   bool operator < (hero obj) const {
      return (this->age < obj.age);
   }
   bool operator > (hero obj) const {
      return (this->age > obj.age);
   }
};
 
 
// ключ константный пришлось применить грубую силу
template<typename KEY, typename TYPE>
void  sort_multimap(multimap<KEY, TYPE>* mmap) {
   multimap<KEY, TYPE>::iterator first = mmap->begin(), last = mmap->end();
   multimap<KEY, TYPE>::iterator a, b;
   TYPE tdata;
   KEY  tkey;
prev:
   b = first;
   for(a = b++; b != last; *a++, *b++) {
       if(a->second > b->second) {
             tkey = (KEY) a->first; 
             tdata = a->second;
             a->second = b->second;
             b->second = tdata;
            *(KEY*)&a->first = b->first;
            *(KEY*)&b->first = tkey;
             goto prev;
        }
    }
}
 
int  main(void) {
   multimap<char, hero> m;
 
   m.insert(make_pair('B', hero("Bob",  30)));
   m.insert(make_pair('S', hero("Stas", 20)));
   m.insert(make_pair('A', hero("Alex", 25)));
   m.insert(make_pair('K', hero("Katy", 19)));
   m.insert(make_pair('A', hero("Angel",29)));
 
   // вывод до сортировки
   for(multimap<char, hero>::const_iterator q = m.begin(); q != m.end(); *q++) 
       cout << q->first << '\t' << q->second.name << "\t\t" << q->second.age << endl;
   
   // пузырковый вариант сортировки
   sort_multimap(&m);
 
   cout.put('\n');
   // результат сортировки
   for(multimap<char, hero>::const_iterator i = m.begin(); i != m.end(); *i++) 
       cout << i->first << '\t' << i->second.name << "\t\t" << i->second.age << endl;
 
   m.clear();
   cin.get();
   return 0;
}
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru