📌  相关文章
📜  set、multiset、unordered_set、unordered_multiset的区别

📅  最后修改于: 2021-09-12 11:31:47             🧑  作者: Mango

1.设置
(i) 按排序顺序存储值。
(ii) 仅存储唯一值。
(iii) 元素只能插入或删除,不能修改。
(iv) 我们可以通过给出开始迭代器和结束迭代器的位置来擦除 1 个以上的元素。
(v) 使用迭代器遍历。
(vi) 集合被实现为二叉搜索树。

// CPP program to demonstrate insert and 
// delete in set
#include 
using namespace std;
int main()
{
    // set declare
    set s;
  
    // Elements added to set
    s.insert(12);
    s.insert(10);
    s.insert(2);
    s.insert(10); // duplicate added
    s.insert(90);
    s.insert(85);
    s.insert(45);
  
    // Iterator declared to traverse
    // set elements
    set::iterator it, it1, it2;
    cout << "Set elements after sort and "
            "removing duplicates:\n";
    for (it = s.begin(); it != s.end(); it++) 
        cout << *it << ' ';    
    cout << '\n';
  
    it1 = s.find(10);
    it2 = s.find(90);
  
    // elements from 10 to elements before
    // 90 erased
    s.erase(it1, it2);
    cout << "Set Elements after erase:\n";
    for (it = s.begin(); it != s.end(); it++)
        cout << *it << ' ';
  
    return 0;
}
OUTPUT:
Set elements after sort and removing duplicates:
2 10 12 45 85 90
Set Elements after erase:
2 90

2.多组
(i) 按排序顺序存储元素。
(ii) 它允许存储多个元素。
(iii) 我们可以通过提供开始迭代器和结束迭代器来擦除 1 个以上的元素。
注意:- 与 set 类似的所有其他属性。

// CPP program to demonstrate insert and 
// delete in set
#include 
using namespace std;
int main()
{
    // multiset declare
    multiset s;
  
    // Elements added to set
    s.insert(12);
    s.insert(10);
    s.insert(2);
    s.insert(10); // duplicate added
    s.insert(90);
    s.insert(85);
    s.insert(45);
  
    // Iterator declared to traverse
    // set elements
    multiset::iterator it, it1, it2;
    cout << "Multiset elements after sort\n";
    for (it = s.begin(); it != s.end(); it++) 
        cout << *it << ' ';    
    cout << '\n';
  
    it1 = s.find(10);
    it2 = s.find(90);
  
    // elements from 10 to elements before 90 
    // erased
    s.erase(it1, it2);
  
    cout << "Multiset Elements after erase:\n";
    for (it = s.begin(); it != s.end(); it++) 
        cout << *it << ' ';    
  
    return 0;
}
OUTPUT:
Multiset elements after sort
2 10 10 12 45 85 90
Multiset Elements after erase:
2 90

3. Unordered_set
(i) 元素可以以任何顺序存储。 (无排序)
(ii) 仅存储唯一值。
(iii) 用于存储元素的哈希表。
(iv) 我们只能擦除给定迭代器位置的元素。
注意:- 与 set 类似的所有其他属性。

// CPP program to demonstrate insert and 
// delete in unordered_set
#include 
using namespace std;
int main()
{
    // unordered_set declare
    unordered_set s;
  
    // Elements added to set
    s.insert(12);
    s.insert(10);
    s.insert(2);
    s.insert(10); // duplicate added
    s.insert(90);
    s.insert(85);
    s.insert(45);
    s.insert(12);
    s.insert(70);
  
    // Iterator declared to traverse
    // set elements
    unordered_set::iterator it, it1;
    cout << "Unordered_set elements after sort:\n";
    for (it = s.begin(); it != s.end(); it++) 
        cout << *it << ' ';
    cout << '\n';
  
    it1 = s.find(10);
  
    // element 10 erased
    s.erase(it1);
    cout << "Unoredered_set Elements after erase:\n";
    for (it = s.begin(); it != s.end(); it++) 
         cout << *it << ' ';    
  
    return 0;
}
OUTPUT:
Unordered_set elements after sort:
70 85 45 12 10 2 90 
Unoredered_set Elements after erase:
70 85 45 12 2 90 

4. Unordered_multiset
(i) 元素可以以任何顺序存储。
(ii) 可以存储重复的元素。
(iii) 用于存储元素的哈希表。
(iv) 我们只能擦除给定迭代器位置的元素。
注意:- 与 set 类似的所有其他属性。

// CPP program to demonstrate insert and 
// delete in unordered_multiset
#include 
using namespace std;
int main()
{
    // unordered_multiset declare
    unordered_multiset s;
  
    // Elements added to set
    s.insert(12);
    s.insert(10);
    s.insert(2);
    s.insert(10); // duplicate added
    s.insert(90);
    s.insert(85);
    s.insert(45);
  
    // Iterator declared to traverse
    // set elements
    unordered_multiset::iterator it, it1;
    cout << "Unordered-Multiset elements after sort:\n";
    for (it = s.begin(); it != s.end(); it++)
        cout << *it << ' ';    
    cout << '\n';
  
    it1 = s.find(10);
  
    // element 10 trained
    s.erase(it1);
  
    cout << "Unordered-Multiset Elements after "
            "erase:\n";
    for (it = s.begin(); it != s.end(); it++) 
        cout << *it << ' ';
      
    return 0;
}
OUTPUT:
Unordered-Multiset elements after sort:
85 45 12 90 2 10 10 
Unordered-Multiset Elements after erase:
85 45 12 90 2 10 

结论 :
简单来说, set是一个容器,用于存储已排序且唯一的元素。如果添加 unordered意味着元素未排序。如果添加了multiset意味着允许重复元素存储。

想要从精选的视频和练习题中学习,请查看C++ 基础课程,从基础到高级 C++ 和C++ STL 课程,了解基础加 STL。要完成从学习语言到 DS Algo 等的准备工作,请参阅完整的面试准备课程