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

Двумерный вектор в C++ Программирование и разработка

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

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

  1. Инициализация с использованием конструктора по умолчанию
  2. Инициализация с использованием списка инициализаторов
  3. Инициализация с использованием массива
  4. Инициализация с использованием вектора
  5. Инициализация из другого набора с помощью конструктора копирования
  6. Инициализация из другой итерируемой структуры данных с использованием конструктора диапазона

Давайте подробно обсудим каждую из этих тем.

1. Инициализация с использованием конструктора по умолчанию

Один из стандартных способов инициализации unordered_set — это инициализация с использованием конструктора по умолчанию, при этом будет сгенерирован пустой unordered_set. Мы можем дополнительно добавлять в него элементы, используя встроенный unordered_set. Метод вставки().

Синтаксис:

unordered_set<string>New_set;
New_set.insert(element1)

Здесь метод insert() можно использовать для вставки элементов в unordered_set.

Ниже приведена программа на C++ для реализации описанного выше подхода:

С++

// C++ program to implement
// the above approach
#include <iostream>
#include <unordered_set>
using namespace std;
// Driver code
int main()
{   
    // Initialize unordered_set
    // using default constructor
    unordered_set<string>New_set;
  
    // unordered_set.insert() method to
    // insert elements to the unordered_set
    New_set.insert("Ground");
    New_set.insert("Grass");
    New_set.insert("Floor");
    New_set.insert("Table");
    New_set.insert("Wood");
    
    // Traverse through the unordered_set
    for(auto x: New_set)
    {
       cout << x << endl;
    }
    return 0;
}

Выход

Wood
Table
Floor
Ground
Grass

2. Инициализация с использованием списка инициализаторов

Другой способ инициализации — передать предопределенный список элементов (initializer_list) в качестве аргумента конструктору по умолчанию для unordered_set.

Синтаксис:

unordered_set<string>New_set({element1, element2, element3, element4}); 

Ниже приведена программа на C++ для реализации описанного выше подхода:

С++

// C++ program to implement
// the above approach
#include <iostream>
#include <unordered_set>
using namespace std;
// Driver code
int main()
{   
    // Initialize unordered_set passing
    // initializer list as an argument
    // to the default constructor
    unordered_set<string>New_set({"Ground",
                                  "Grass",
                                  "Floor",
                                  "Table" ,
                                  "Wood"});
    
    // Traverse through the unordered_set
    for(auto x: New_set)
    {
       cout << x << endl;
    }  
    return 0;
}

Выход

Wood
Table
Floor
Grass
Ground

3. Инициализация с использованием массива

Поскольку unordered_set хранит уникальные элементы, можно хранить элементы, используя массив данных того же типа.

Синтаксис:

unordered_set<string>New_set(old_arr, old_arr + n);

Здесь old_arr — это массив строк, содержимое которого будет скопировано в New_set.

Ниже приведена программа на 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
    string old_arr[] = {"Ground",
                        "Grass" ,
                        "Floor",
                        "Cement",
                        "Table"};
    int n = (sizeof(old_arr) /
             sizeof(old_arr[0]));
  
    // Adding these elements stored
    // in the array   
    unordered_set<string>New_set(old_arr,
                                 old_arr + n);
  
    // Traverse through the unordered_map
    for(auto x: New_set)
    {
       cout << x << endl;
    }
    return 0;
}

Выход

Table
Cement
Floor
Grass
Ground

4. Инициализация с использованием вектора

Можно сохранить элементы в unordered_set, используя вектор того же типа данных.

Синтаксис:

unordered_set<string>New_set(old_vector.begin(), old_vector.end());

Здесь old_vector — это вектор строк, содержимое которых будет скопировано в New_set.

Ниже приведена программа на 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
    vector<string>old_arr = {"Ground",
                             "Grass",
                             "Floor",
                             "Cement",
                             "Table"};
  
    // Adding these elements stored
    // in the vector   
    unordered_set<string>New_set(old_arr.begin(),
                                 old_arr.end());
  
    // Traverse through the unordered_map
    for(auto x: New_set)
    {
       cout << x << endl;
    }
    return 0;
}

Выход

Table
Cement
Floor
Grass
Ground

5. Инициализация из другого набора с помощью конструктора копирования

Одним из способов инициализации unordered_set является копирование содержимого из другого набора одно за другим с помощью конструктора копирования.

Синтаксис:

unordered_set<string>New_set(old_set);

Здесь old_set — это набор, содержимое которого будет скопировано в new_set.

Ниже приведена программа на C++ для реализации описанного выше подхода:

С++

// C++ program to implement
// the above approach
#include <iostream>
#include <unordered_set>
using namespace std;
// Driver code
int main()
{
    // Initialize an unordered_set
    // using default constructor
    unordered_set<string>old_set;
  
    // unordered_set.insert() method
    // to insert elements to the
     // unordered_set
    old_set.insert("Ground");
    old_set.insert("Grass");
    old_set.insert("Floor");
    old_set.insert("Table");
    old_set.insert("Wood");
  
  
    // Create a new_set where contents
    // of the previous set will be copied
    // using copy constructor   
    unordered_set<string>New_set(old_set);
  
    // Traverse through the unordered_map
    for(auto x: New_set)
    {
       cout << x <<endl;
    }   
    return 0;
}

Выход

Wood
Table
Floor
Ground
Grass

6. Инициализация из другой итерируемой структуры данных с использованием конструктора диапазона

Другой способ инициализировать unordered_set — использовать конструктор диапазона для копирования элементов из итерируемой структуры данных (unordered_set в этом примере) во вновь инициализированный unordered_set.

Синтаксис:

unordered_set<string>New_set(begin(old_set), end(old_set));

Здесь old_set — это набор, содержимое которого будет скопировано в New_set.

Ниже приведена программа на C++ для реализации описанного выше подхода:

С++

// C++ program to implement
// the above approach
#include <iostream>
#include <unordered_set>
using namespace std;
// Driver code
int main()
{
    // Initialize an unordered_set using
    // default constructor
    unordered_set<string>old_set;
  
    // unordered_set.insert() method to
    // insert elements to the unordered_set
    old_set.insert("Ground");
    old_set.insert("Grass");
    old_set.insert("Floor");
    old_set.insert("Table");
    old_set.insert("Wood");
  
  
    // Create a new_set where contents of
    // the previous set will be copied using
    // range constructor   
    unordered_set<string>New_set(begin(old_set),
                                 end(old_set));
  
    // Traverse through the unordered_map
    for(auto x: New_set)
    {
       cout << x <<endl;
    }
    return 0;
}

Выход

Grass
Ground
Floor
Table
Wood

Читайте также:  Системный вызов функции подключения в C
Оцените статью
bestprogrammer.ru
Добавить комментарий