unordered map — это связанный контейнер, доступный в стандартной библиотеке шаблонов C++ (STL), который используется для хранения пар ключ-значение. Он внутренне использует принцип работы хэш-карты для хранения пар ключ-значение.
Различные способы инициализации unordered map в C++ :
- Инициализация с использованием оператора присваивания и индекса
- Инициализация с использованием списка инициализаторов
- Инициализация с использованием массива пар
- Инициализация с другой карты с помощью метода unordered_map.insert()
- Инициализация с другой карты с помощью конструктора копирования
- Инициализация через диапазон
- 1. Инициализация с использованием оператора присваивания и индекса
- 2. Инициализация с использованием списка инициализаторов
- 3. Инициализация с использованием массива пар
- 4. Инициализация из другой карты с использованием метода unordered_map.insert()
- 5. Инициализация с другой карты с помощью конструктора копирования
- 6. Инициализация через диапазон
1. Инициализация с использованием оператора присваивания и индекса
Один из самых простых способов инициализации unordered_map — использовать операторы присваивания (=) и индекса ([]), как показано ниже:
Синтаксис:
unordered_map<string,string>New_map;
New_map[“5”] = “6”;
Здесь,
[] is the subscript operator
= is the assignment operator
Ниже приведена программа на C++ для реализации описанного выше подхода:
С++
// C++ program to implement
// the above approach
#include <iostream>
#include <unordered_map>
using
namespace
std;
// Driver code
int
main()
{
// Initialize unordered_map
// using default constructor
unordered_map<string,string>New_map;
// Adding key-value pairs using
// subscript([]) and assignment(=)
// operators
New_map[
"Ground"
] =
"Grass"
;
New_map[
"Floor"
] =
"Cement"
;
New_map[
"Table"
] =
"Wood"
;
// Traverse through the unordered_map
for
(
auto
x: New_map)
{
cout << x.first <<
"->"
<<
x.second <<endl;
}
return
0;
}
Выход
Table->Wood Ground->Grass Floor->Cement
2. Инициализация с использованием списка инициализаторов
Другой способ инициализации unordered_map — использовать предопределенный список пар ключ-значение.
Синтаксис:
unordered_map<string,string>New_map = {{key1, value1}, {key2, value2}, {key3, value3}};
Ниже приведена программа на C++ для реализации описанного выше подхода:
С++
// C++ program to implement
// the above approach
#include <iostream>
#include <unordered_map>
using
namespace
std;
// Driver code
int
main()
{
// Initialize unordered_map using
// default constructor
unordered_map<string, string>New_map;
// Adding key-value pairs using
// Initializer list
New_map = {{
"Ground"
,
"Grass"
},
{
"Floor"
,
"Cement"
},
{
"Table"
,
"Wood"
}};
// Traverse through the unordered_map
for
(
auto
x: New_map)
{
cout << x.first <<
"->"
<<
x.second <<endl;
}
return
0;
}
Выход
Table->Wood Floor->Cement Ground->Grass
3. Инициализация с использованием массива пар
Поскольку unordered_map хранит пары ключ-значение, можно хранить ключ-значение, используя массив пар одного типа.
Синтаксис:
unordered_map<string, string>New_map(old_arr, old_arr + n);
Здесь old_arr — это массив пар, содержимое которых будет скопировано в new_map.
В случае вектора пар используйте встроенные итераторы для копирования содержимого из вектора пар в новую карту unordered_map.
unordered_map<int, int>New_map(old_vector.begin(), old_vector.end());
Здесь old_vector — это вектор пар, содержимое которых будет скопировано в new_map.
Ниже приведена программа на C++ для реализации описанного выше подхода:
С++
// C++ program to implement
// the above approach
#include <bits/stdc++.h>
using
namespace
std;
// Driver code
int
main()
{
// Initialize an array of pair
// of strings
pair<string,string>old_arr[] =
{
make_pair(
"Ground"
,
"Grass"
),
make_pair(
"Floor"
,
"Cement"
),
make_pair(
"Table"
,
"Wood"
)
};
int
n = (
sizeof
(old_arr) /
sizeof
(old_arr[0]));
// Adding these key-value pairs using
// the pairs stored in the array of pairs
unordered_map<string,
string>New_map(old_arr,
old_arr + n);
// Traverse through the unordered_map
for
(
auto
x: New_map)
{
cout << x.first <<
"->"
<<
x.second <<endl;
}
return
0;
}
Выход
Table->Wood Floor->Cement Ground->Grass
4. Инициализация из другой карты с использованием метода unordered_map.insert()
Стандартный способ копирования элементов с карты на существующую старую карту в C++ — это использование unordered_map. вставьте функцию-член, как показано ниже:
Синтаксис:
unordered_map<string, string> New_map;
New_map.insert(old_map.begin(), old_map.end());
Здесь old_map — это карта, содержимое которой будет скопировано в new_map.
Ниже приведена программа на C++ для реализации описанного выше подхода:
С++
// C++ program to implement
// the above approach
#include <iostream>
#include <unordered_map>
using
namespace
std;
// Driver code
int
main()
{
// Initialize an unordered_map using
// default constructor
unordered_map<string,string>old_map;
// Adding key-value pairs using
// subscript([]) and assignment(=)
// operators
old_map[
"Ground"
] =
"Grass"
;
old_map[
"Floor"
] =
"Cement"
;
old_map[
"Table"
] =
"Wood"
;
// Create a new_map where contents
// of the previous map will be copied
// using copy constructor and iterator
// provided by the map
unordered_map<string, string>New_map;
New_map.insert(old_map.begin(),
old_map.end());
// Traverse through the unordered_map
for
(
auto
x: New_map)
{
cout << x.first <<
"->"
<<
x.second <<endl;
}
return
0;
}
Выход
Floor->Cement Ground->Grass Table->Wood
5. Инициализация с другой карты с помощью конструктора копирования
Одним из способов инициализации unordered_map является копирование содержимого из другой карты одно за другим с помощью конструктора копирования.
Синтаксис:
unordered_map<string, string>New_map(old_map);
Здесь old_map — это карта, содержимое которой будет скопировано в new_map.
Ниже приведена программа на C++ для реализации описанного выше подхода:
С++
// C++ program to implement
// the above approach
#include <iostream>
#include <unordered_map>
using
namespace
std;
// Driver code
int
main()
{
// Initialize an unordered_map
// using default constructor
unordered_map<string,string>old_map;
// Adding key-value pairs using
// subscript([]) and assignment(=)
// operators
old_map[
"Ground"
] =
"Grass"
;
old_map[
"Floor"
] =
"Cement"
;
old_map[
"Table"
] =
"Wood"
;
// Create a new_map where contents of
// the previous map will be copied using
// copy constructor
unordered_map<string, string>New_map(old_map);
// Traverse through the unordered_map
for
(
auto
x: New_map)
{
cout << x.first <<
"->"
<<
x.second <<endl;
}
return
0;
}
Выход
Table->Wood Ground->Grass Floor->Cement
6. Инициализация через диапазон
Другой способ инициализации unordered_map — инициализировать его с помощью диапазона пар ключ-значение.
Синтаксис:
unordered_map<string,string>New_map(old_map.begin(),old_map.end());
Здесь вместо использования другой карты мы храним любой диапазон пар ключ-значение.
Ниже приведена программа на C++ для реализации описанного выше подхода:
С++
// C++ program to implement
// the above approach
#include <iostream>
#include <unordered_map>
using
namespace
std;
// Driver code
int
main()
{
// Initialize an unordered_map
// using defualt constructor
unordered_map<string, string>old_map;
// Adding key-value pairs using subscript([])
// and assignment(=) operators
old_map[
"Ground"
] =
"Grass"
;
old_map[
"Floor"
] =
"Cement"
;
old_map[
"Table"
] =
"Wood"
;
// Create a new_map where a range of
// key-value pairs are stored from
// old_map
unordered_map<string,
string>New_map(old_map.begin(),
old_map.end());
// Traverse through the unordered_map
for
(
auto
x: New_map)
{
cout << x.first <<
"->"
<<
x.second <<endl;
}
return
0;
}
Выход
Floor->Cement Ground->Grass Table->Wood