Раскрытие магии инициализации unordered_map в C++

Готовы ли вы раскрыть возможности unordered_map в C++? Пристегнитесь, и мы углубимся в мир инициализации этого универсального контейнера с разговорными объяснениями и практическими примерами кода. К концу этой статьи вы будете вооружены набором методов, которые помогут начать ваши приключения на unordered_map.

Но сначала давайте быстро разберемся, что такое unordered_map. Это ассоциативный контейнер на языке C++, в котором хранятся пары ключ-значение, обеспечивающие среднюю сложность постоянного времени для таких операций, как вставка, удаление и извлечение. Вот как вы можете инициализировать unordered_map, используя различные методы:

Метод 1: инициализация с фигурными скобками

std::unordered_map<std::string, int> myMap = {{"apple", 10}, {"banana", 5}, {"orange", 8}};

Этот метод использует инициализацию в фигурных скобках для непосредственной инициализации unordered_map списком пар ключ-значение.

Метод 2: использование функции вставки

std::unordered_map<std::string, int> myMap;
myMap.insert({"apple", 10});
myMap.insert({"banana", 5});
myMap.insert({"orange", 8});

Здесь мы начинаем с пустой unordered_map и используем функцию вставки для добавления элементов один за другим.

Метод 3: использование функции make_pair

std::unordered_map<std::string, int> myMap;
myMap.insert(std::make_pair("apple", 10));
myMap.insert(std::make_pair("banana", 5));
myMap.insert(std::make_pair("orange", 8));

Подобно методу 2, этот подход предполагает использование функции вставки, но вместо инициализации в фигурных скобках мы создаем пары с помощью функции make_pair.

Метод 4. Инициализация диапазона

std::vector<std::pair<std::string, int>> keyValuePairs = {{"apple", 10}, {"banana", 5}, {"orange", 8}};
std::unordered_map<std::string, int> myMap(keyValuePairs.begin(), keyValuePairs.end());

В этом методе мы сначала инициализируем вектор пар ключ-значение, а затем используем конструктор диапазона unordered_map, чтобы инициализировать его элементами вектора.

Метод 5: функция размещения

std::unordered_map<std::string, int> myMap;
myMap.emplace("apple", 10);
myMap.emplace("banana", 5);
myMap.emplace("orange", 8);

Функция emplace позволяет нам создавать и вставлять элементы на месте, избегая ненужных копий или перемещений.

Это всего лишь несколько методов инициализации unordered_map в C++. Каждый подход имеет свои преимущества и может подходить для разных сценариев. Поэкспериментируйте с ними, чтобы найти тот, который соответствует вашим конкретным потребностям.

В заключение, инициализировать unordered_map в C++ проще простого, используя эти методы в вашем наборе инструментов. Предпочитаете ли вы инициализацию со скобками, использование функции вставки или использование возможностей emplace, у вас есть свободный выбор. Так что вперед, погрузитесь в мир unordered_map и раскройте свое мастерство программирования!