С++ std:: map элементов в порядке убывания ключей
Как cal я использую контейнер std:: map со значением ключа в порядке убывания.
В качестве примера вставьте следующие элементы:
[2 , 5]
[1 , 34]
[3 , 67]
Они будут упорядочены на карте, например:
position 0: [1, 34]
position 1: [2, 5]
position 2: [3, 67]
Я могу выполнить итерацию по карте обратно, но предположим, что в следующий раз я вставляю [-1, 60]. Будет ли он помещен в первую позицию?
Ответы
Ответ 1
Используйте произвольный компаратор, когда заказ по умолчанию не делает его для вас.
Вы передаете его в качестве третьего параметра шаблона (который обычно по умолчанию равен std::less<KeyType>
).
В вашем случае вы можете использовать std::greater
:
std::map<int, int, std::greater<int> > m;
Пример кода:
#include <map>
#include <iostream>
#include <functional>
int main() {
std::map<int, int, std::greater<int>> m { {-1, 77}, {0, 42}, {1, 84} };
for (const auto& p : m)
std::cout << '[' << p.first << ',' << p.second << "]\n";
}
Результат:
[1,84]
[0,77]
[-1,42]
Ответ 2
std::map
уже отсортирован, поэтому вам нужно всего лишь пересечь карту, используя reverse_iterator
.
Однако карта не является массивом. В карте нет такой вещи, как "n-я позиция". (std::map
чаще всего реализуется с использованием своего рода двоичного дерева поиска.) Если вы абсолютно, неизбежно должны указать порядок вручную, используйте std::vector<std::pair>
.