Различные способы инициализации unordered map в C++

Как преобразовать строку в int в C++ Программирование и разработка

unordered map — это связанный контейнер, доступный в стандартной библиотеке шаблонов C++ (STL), который используется для хранения пар ключ-значение. Он внутренне использует принцип работы хэш-карты для хранения пар ключ-значение.

Различные способы инициализации unordered map в C++ :

  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

Читайте также:  Как преобразовать строку JSON в SQL-запрос?
Оцените статью
bestprogrammer.ru
Добавить комментарий