Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ WDK и Visual Studio 2008 https://www.cyberforum.ru/ cpp/ thread260057.html
Всем доброго времени суток. Скачал Windows DDK с майкрософта. Установил в C:\WinDDK\7600.16385.1 Включил в свойствах, (свойства конфигурации -> c\c++) Дополнительные каталоги включения:...
C++ Зацикливается при неверном вводе
есть такой кусочек while(true) { scanf("%d%c%d", &x, &zn, &y); switch (zn) { case '+': rez=x+y; break;
Функции C++
Составить процедуру, результатом работы которой является символ, заданный при обращении к этой процедуре, если этот символ не является буквой, и соответствующая строчная (малая) буква в противном. ...
C++ Работа с командной строкой Ситуация: у меня есть программа-интерпретатор другого языка. Работает через командную строку. Преподаватель попросил следующее: реализовать простейшие арифметические операции, которые при этом... https://www.cyberforum.ru/ cpp/ thread259691.html
C++ Ошибка в программе https://www.cyberforum.ru/ cpp/ thread259562.html
пишу задачу на классы в Си++,но не могу разобраться что за ошибка,помогите это очень важно #include<iostream.h> #include<conio.h> #include<math.h> #include<stdio.h> class Student { private:
Симуляция нажатия кнопки C++
ПОДСКАЖИТЕ как сделать симуляцию нажатия кнопки в заданое время. т.е. мне нужно что бы клавиша ENTER нажалась в определенное время без моего присутствия
C++ DLL в EXE
Здравствуйте, скажите пожайлуста, каким образом можно вшить dll либу в exe, чтоб не таскать их все время рядом и не кидать в windows\win32\ . Использую Code::Blocks 8.02.
C++ Расчет траектории движении тела с учетом сопротивления воздуха Определить максимальную дальность полета тела, брошенного с начальной скоростью под углом к горизонту при наличии заданной постоянно действующей горизонтальной силы сопротивления среды .... https://www.cyberforum.ru/ cpp/ thread259164.html
C++ Циклическая перестановка https://www.cyberforum.ru/ cpp/ thread258920.html
1. Написать программу, которая позволит ввести два числа n и k типа ulong с клавиатуры, напечатать их на дисплее, и используя битовые операции сделать в числе n циклическую перестановку бит кратных 6...
C++ Не получается решить задание на рекурсией! Не получается решить задачу((( Помогите решить на С https://www.cyberforum.ru/ cpp/ thread258714.html
Evg
Эксперт CАвтор FAQ
21147 / 8163 / 628
Регистрация: 30.03.2009
Сообщений: 22,463
Записей в блоге: 30
0

Обход элементов std::map в порядке их создания

19.03.2011, 13:18. Просмотров 12739. Ответов 7
Метки (Все метки)

Имеется ассоциативный массив и его заполнение:

C++
1
2
3
4
std::map<unsigned,string> arr;
arr[10] = "abc";
arr[7] = "def";
arr[20] = "ghi";
Теперь если я буду обходить этот массив при помощи итераторов, то обход будет производиться в порядке возрастания ключа массива: т.е. в данном случае обойдутся элементы в порядке 7, 10, 20

Мне хочется обойти массив в порядке создания его элементов, т.е. 10, 7, 20. Вот здесь я прочёл, что в шаблон можно подать некий третий параметр Compare

Compare: Comparison class: A class that takes two arguments of the key type and returns a bool. The expression comp(a,b), where comp is an object of this comparison class and a and b are key values, shall return true if a is to be placed at an earlier position than b in a strict weak ordering operation. This can either be a class implementing a function call operator or a pointer to a function (see constructor for an example). This defaults to less<Key>, which returns the same as applying the less-than operator (a<b).
1. Я правильно понимаю, что этот параметр шаблона влияет ТОЛЬКО на процесс занесения элементов в таблицу (ну и, как побочный эффект, влияет на порядок обхода через итераторы) и ничего больше другого не делает
2. Как описать этот Compare для моего случая? У меня слишком маленький опыт работы с Си++, и, читая документацию, совсем сломал мозги. По исходнику контейнера map я тоже понять ничего не могу - для меня это ещё слишком сложно

Добавлено через 20 минут
Наконец, понял, что за ошибку выдавал компилятор, когда я пытался сделать так, как показано в примерах у людей: я Compare подавал третьим параметром в шаблон при описании массива, но итератор был написан как раньше - с двумя параметрами.

Итого, получается что-то типа того:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class compare
{
  public:
    bool operator() (const unsigned x,const unsigned y) const { return true; }
};
 
std::map<unsigned,string> arr;
arr[10] = "abc";
arr[7] = "def";
arr[20] = "ghi";
 
std::map<unsigned,string,compare>::const_iterator iter;
for (iter = arr.begin(); iter != arr.end(); iter++)
  ...
Но всё-таки хотелось бы услышать ответ на вопрос номер 1.

Добавлено через 1 час 14 минут
Однако при таком раскладе неправильно работает чтение элементов массива (x = arr[7]) или проверка наличия элемента (arr.find(7) != arr.end()). Так что вопрос снова актуален

Вернуться к обсуждению:
Обход элементов std::map в порядке их создания
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.03.2011, 13:18
Готовые ответы и решения:

Возможно ли создать контейнер std::map, в котором в качестве значения была бы ссылка на std::map?
Здравствуйте. Возможно ли создать контейнер std::map, в котором в качестве значения была бы...

Emplace в std::map. Как добавить элемент в std::map без копирования?
здравствуйте... есть ли способ не писать так: std::map&lt;int, char&gt; ksa;...

Очистка map и перевернутого std::map c std::greater
Написала я программу, которая заполняет два контейнера map. a,b. вывод программы такой 11 a:...

Std::map insert in while - добавление новых элементов в цикле
Задача - обьявить мапу, обьявить цикл и в цикле сначало проверять(если оно есть) содержимое мапы а...

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