📜  在 C++ 中初始化 unordered_map 的不同方法

📅  最后修改于: 2022-05-13 01:55:12.918000             🧑  作者: Mango

在 C++ 中初始化 unordered_map 的不同方法

unordered_map是 C++ 标准模板库 (STL) 中可用的关联容器,用于存储键值对。它在内部使用哈希图的工作原理来存储键值对。

在 C++ 中初始化 unordered_map 的不同方法:

  1. 使用赋值和下标运算符初始化
  2. 使用初始化列表进行初始化
  3. 使用对数组进行初始化
  4. 使用 unordered_map.insert() 方法从另一个地图初始化
  5. 使用复制构造函数从另一个映射初始化
  6. 通过范围初始化

1. 使用赋值和下标运算符初始化

初始化 unordered_map 的最简单方法之一是使用assignment(=)subscript([])运算符,如下所示:

句法:

这里,

  • [] 是下标运算符
  • = 是赋值运算符

下面是实现上述方法的 C++ 程序:

C++
// C++ program to implement
// the above approach
#include 
#include 
using namespace std;
 
// Driver code
int main()
{
    // Initialize unordered_map
    // using default constructor
    unordered_mapNew_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 <


C++
// C++ program to implement
// the above approach
#include 
#include 
using namespace std;
 
// Driver code
int main()
{
    // Initialize unordered_map using
    // default constructor
    unordered_mapNew_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 <


C++
// C++ program to implement
// the above approach
#include 
using namespace std;
 
// Driver code
int main()
{
    // Initialize an array of pair
    // of strings
    pairold_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_mapNew_map(old_arr,
                                 old_arr + n);
   
    // Traverse through the unordered_map
    for(auto x: New_map)
    {
       cout << x.first << "->" <<
               x.second <


C++
// C++ program to implement
// the above approach
#include 
#include 
using namespace std;
 
// Driver code
int main()
{
    // Initialize an unordered_map using
    // default constructor
    unordered_mapold_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_mapNew_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 <


C++
// C++ program to implement
// the above approach
#include 
#include 
using namespace std;
 
// Driver code
int main()
{
    // Initialize an unordered_map
    // using default constructor
    unordered_mapold_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_mapNew_map(old_map);
   
    // Traverse through the unordered_map
    for(auto x: New_map)
    {
       cout << x.first << "->" <<
               x.second <


C++
// C++ program to implement
// the above approach
#include 
#include 
using namespace std;
 
// Driver code
int main()
{
    // Initialize an unordered_map
    // using default constructor
    unordered_mapold_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_mapNew_map(old_map.begin(),
                                 old_map.end());
   
    // Traverse through the unordered_map
    for(auto x: New_map)
    {
       cout << x.first << "->" <<
               x.second <


输出
Table->Wood
Ground->Grass
Floor->Cement

2. 使用初始化列表初始化

初始化 unordered_map 的另一种方法是使用预定义的键值对列表。

句法:

下面是实现上述方法的 C++ 程序:

C++

// C++ program to implement
// the above approach
#include 
#include 
using namespace std;
 
// Driver code
int main()
{
    // Initialize unordered_map using
    // default constructor
    unordered_mapNew_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 <
输出
Table->Wood
Floor->Cement
Ground->Grass

3. 使用一对数组进行初始化

由于 unordered_map 存储键值对,因此可以使用相同类型的对数组存储键值。

句法:

这里,old_arr 是将内容复制到 new_map 的对数组。

在向量对的情况下,使用内置的迭代器将内容从对向量复制到新的 unordered_map。

这里,old_vector 是将内容复制到 new_map 的对向量。

下面是实现上述方法的 C++ 程序:

C++

// C++ program to implement
// the above approach
#include 
using namespace std;
 
// Driver code
int main()
{
    // Initialize an array of pair
    // of strings
    pairold_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_mapNew_map(old_arr,
                                 old_arr + n);
   
    // Traverse through the unordered_map
    for(auto x: New_map)
    {
       cout << x.first << "->" <<
               x.second <
输出
Table->Wood
Floor->Cement
Ground->Grass

4. 使用 unordered_map.insert() 方法从另一个地图初始化

在 C++ 中将元素从地图复制到现有旧地图的标准方法是使用 unordered_map。插入成员函数如下图:

句法:

这里,old_map 是将内容复制到 new_map 的地图。

下面是实现上述方法的 C++ 程序:

C++

// C++ program to implement
// the above approach
#include 
#include 
using namespace std;
 
// Driver code
int main()
{
    // Initialize an unordered_map using
    // default constructor
    unordered_mapold_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_mapNew_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 <
输出
Floor->Cement
Ground->Grass
Table->Wood

5. 使用复制构造函数从另一个地图初始化

初始化 unordered_map 的一种方法是使用复制构造函数从另一个映射一个接一个地复制内容。

句法:

这里,old_map 是将内容复制到 new_map 的地图。

下面是实现上述方法的 C++ 程序:

C++

// C++ program to implement
// the above approach
#include 
#include 
using namespace std;
 
// Driver code
int main()
{
    // Initialize an unordered_map
    // using default constructor
    unordered_mapold_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_mapNew_map(old_map);
   
    // Traverse through the unordered_map
    for(auto x: New_map)
    {
       cout << x.first << "->" <<
               x.second <
输出
Table->Wood
Ground->Grass
Floor->Cement

6. 通过范围初始化

初始化 unordered_map 的另一种方法是通过一系列键值对对其进行初始化。

句法:

在这里,我们不使用另一个映射,而是存储任意范围的键值对。

下面是实现上述方法的 C++ 程序:

C++

// C++ program to implement
// the above approach
#include 
#include 
using namespace std;
 
// Driver code
int main()
{
    // Initialize an unordered_map
    // using default constructor
    unordered_mapold_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_mapNew_map(old_map.begin(),
                                 old_map.end());
   
    // Traverse through the unordered_map
    for(auto x: New_map)
    {
       cout << x.first << "->" <<
               x.second <
输出
Floor->Cement
Ground->Grass
Table->Wood