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

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

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

unordered_set是 C++ 标准模板库(STL)中可用的关联容器,用于存储没有任何特定顺序的唯一元素,它在内部使用哈希表的工作原理来存储元素。

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

  1. 使用默认构造函数初始化
  2. 使用初始化列表进行初始化
  3. 使用数组初始化
  4. 使用向量初始化
  5. 使用复制构造函数从另一个集合初始化
  6. 使用范围构造函数从另一个可迭代数据结构初始化

让我们详细讨论这些主题。

1. 使用默认构造函数初始化

初始化 unordered_set 的一种标准方法是使用默认构造函数进行初始化,这将生成一个空的 unordered_set。我们可以使用内置的 unordered_set 进一步向其中添加元素。插入()方法。

句法:

在这里, insert() 方法可以进一步用于将元素插入到 unordered_set

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

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


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


C++
// C++ program to implement
// the above approach
#include 
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_setNew_set(old_arr,
                                 old_arr + n);
   
    // Traverse through the unordered_map
    for(auto x: New_set)
    {
       cout << x << endl;
    }
    return 0;
}


C++
// C++ program to implement
// the above approach
#include 
using namespace std;
 
// Driver code
int main()
{
    // Initialize an array of pair
    // of strings
    vectorold_arr = {"Ground",
                             "Grass",
                             "Floor",
                             "Cement",
                             "Table"};
   
    // Adding these elements stored
    // in the vector   
    unordered_setNew_set(old_arr.begin(),
                                 old_arr.end());
   
    // Traverse through the unordered_map
    for(auto x: New_set)
    {
       cout << x << endl;
    }
    return 0;
}


C++
// C++ program to implement
// the above approach
#include 
#include 
using namespace std;
 
// Driver code
int main()
{
    // Initialize an unordered_set
    // using default constructor
    unordered_setold_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_setNew_set(old_set);
   
    // Traverse through the unordered_map
    for(auto x: New_set)
    {
       cout << x <


C++
// C++ program to implement
// the above approach
#include 
#include 
using namespace std;
 
// Driver code
int main()
{
    // Initialize an unordered_set using
    // default constructor
    unordered_setold_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_setNew_set(begin(old_set),
                                 end(old_set));
   
    // Traverse through the unordered_map
    for(auto x: New_set)
    {
       cout << x <


输出
Wood
Table
Floor
Ground
Grass

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

另一种初始化方法是将预定义的元素列表 (initializer_list) 作为参数传递给 unordered_set 的默认构造函数。

句法:

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

C++

// C++ program to implement
// the above approach
#include 
#include 
using namespace std;
 
// Driver code
int main()
{   
    // Initialize unordered_set passing
    // initializer list as an argument
    // to the default constructor
    unordered_setNew_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 存储唯一元素,因此可以使用相同数据类型的数组来存储元素。

句法:

这里,old_arr 是将内容复制到 New_set 中的字符串数组。

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

C++

// C++ program to implement
// the above approach
#include 
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_setNew_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。

句法:

这里,old_vector 是将内容复制到 New_set 中的字符串向量。

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

C++

// C++ program to implement
// the above approach
#include 
using namespace std;
 
// Driver code
int main()
{
    // Initialize an array of pair
    // of strings
    vectorold_arr = {"Ground",
                             "Grass",
                             "Floor",
                             "Cement",
                             "Table"};
   
    // Adding these elements stored
    // in the vector   
    unordered_setNew_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 的一种方法是使用复制构造函数一个接一个地从另一个集合中复制内容。

句法:

这里,old_set 是将内容复制到 new_set 的集合。

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

C++

// C++ program to implement
// the above approach
#include 
#include 
using namespace std;
 
// Driver code
int main()
{
    // Initialize an unordered_set
    // using default constructor
    unordered_setold_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_setNew_set(old_set);
   
    // Traverse through the unordered_map
    for(auto x: New_set)
    {
       cout << x <
输出
Wood
Table
Floor
Ground
Grass

6. 使用范围构造函数从另一个可迭代数据结构初始化

初始化 unordered_set 的另一种方法是使用范围构造函数将元素从可迭代数据结构(本例中为 unordered_set)复制到新初始化的 unordered_set。

句法:

这里,old_set 是将内容复制到 New_set 的集合。

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

C++

// C++ program to implement
// the above approach
#include 
#include 
using namespace std;
 
// Driver code
int main()
{
    // Initialize an unordered_set using
    // default constructor
    unordered_setold_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_setNew_set(begin(old_set),
                                 end(old_set));
   
    // Traverse through the unordered_map
    for(auto x: New_set)
    {
       cout << x <
输出
Grass
Ground
Floor
Table
Wood