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