std:: map
|
Определено в заголовочном файле
<map>
|
||
|
template
<
class
Key,
|
(1) | |
|
namespace
pmr
{
template
<
|
(2) | (начиная с C++17) |
std::map
— это отсортированный ассоциативный контейнер, содержащий пары ключ-значение с уникальными ключами. Ключи сортируются с использованием функции сравнения
Compare
. Операции поиска, удаления и вставки имеют логарифмическую сложность. Карты обычно реализуются как
Красно-чёрные деревья
.
Итераторы
std::map
проходят элементы в порядке возрастания ключей, где возрастание определяется сравнением, использованным при создании. То есть, для заданных
-
m
,
std::map - it_l и it_r , разыменовываемые итераторы для m , причём it_l < it_r .
m. value_comp ( ) ( * it_l, * it_r ) == true (от наименьшего к наибольшему при использовании сравнения по умолчанию).
Везде, где стандартная библиотека использует требования Compare , уникальность определяется с использованием отношения эквивалентности. Говоря нестрого, два объекта a и b считаются эквивалентными (не уникальными), если ни один из них не меньше другого: ! comp ( a, b ) && ! comp ( b, a ) .
std::map
удовлетворяет требованиям
Container
,
AllocatorAwareContainer
,
AssociativeContainer
и
ReversibleContainer
.
Все функции-члены
std::map
являются
constexpr
: возможно создавать и использовать объекты
std::map
при вычислении константного выражения.
Однако, объекты
|
(since C++26) |
Содержание
Параметры шаблона
Типы-члены
Классы-члены
Функции-члены
Функции, не являющиеся членами класса
Примечания
Пример
Запустить этот код
#include <iostream> #include <map> #include <string> #include <string_view> void print_map(std::string_view comment, const std::map<std::string, int>& m) { std::cout << comment; // Итерация с использованием возможностей C++17 for (const auto& [key, value] : m) std::cout << '[' << key << "] = " << value << "; "; // Альтернатива C++11: // for (const auto& n : m) // std::cout << n.first << " = " << n.second << "; "; // // Альтернатива C++98: // for (std::map<std::string, int>::const_iterator it = m.begin(); it != m.end(); ++it) // std::cout << it->first << " = " << it->second << "; "; std::cout << '\n'; } int main() { // Создание map из трех пар (string, int) std::map<std::string, int> m{{"CPU", 10}, {"GPU", 15}, {"RAM", 20}}; print_map("1) Исходный map: ", m); m["CPU"] = 25; // обновление существующего значения m["SSD"] = 30; // вставка нового значения print_map("2) Обновленный map: ", m); // Использование operator[] с несуществующим ключом всегда выполняет вставку std::cout << "3) m[UPS] = " << m["UPS"] << '\n'; print_map("4) Обновленный map: ", m); m.erase("GPU"); print_map("5) После удаления: ", m); std::erase_if(m, [](const auto& pair){ return pair.second > 25; }); print_map("6) После удаления: ", m); std::cout << "7) m.size() = " << m.size() << '\n'; m.clear(); std::cout << std::boolalpha << "8) Map пуст: " << m.empty() << '\n'; } Вывод: 1) Initial map: [CPU] = 10; [GPU] = 15; [RAM] = 20; 2) Updated map: [CPU] = 25; [GPU] = 15; [RAM] = 20; [SSD] = 30; 3) m[UPS] = 0 4) Updated map: [CPU] = 25; [GPU] = 15; [RAM] = 20; [SSD] = 30; [UPS] = 0; 5) After erase: [CPU] = 25; [RAM] = 20; [SSD] = 30; [UPS] = 0; 6) After erase: [CPU] = 25; [RAM] = 20; [UPS] = 0; 7) m.size() = 3 8) Map is empty: true Отчеты о дефектахСледующие отчеты об изменениях в поведении, содержащие описания дефектов, были применены ретроактивно к ранее опубликованным стандартам C++.
Смотрите также
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||