个性化阅读
专注于IT技术分析

set,multiset,unordered_set,unordered_multiset之间的差异

1. set

(i)按排序顺序存储值。

(ii)仅存储唯一值。

(iii)元素只能插入或删除, 而不能修改。

(iv)我们可以通过指定开始迭代器和结束迭代器的位置来擦除1个以上的元素。

(v)使用迭代器遍历。

(vi)集被实现为二叉搜索树.

//CPP program to demonstrate insert and 
//delete in set
#include <bits/stdc++.h>
using namespace std;
int main()
{
     //set declare
     set<int> 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<int>::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.multiset

(i)按排序顺序存储元素。

(ii)它允许存储多个元素。

(iii)我们可以通过指定start迭代器和end迭代器来擦除1个以上的元素。

注意:-所有其他属性与set相似。

//CPP program to demonstrate insert and 
//delete in set
#include <bits/stdc++.h>
using namespace std;
int main()
{
     //multiset declare
     multiset<int> 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<int>::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 <bits/stdc++.h>
using namespace std;
int main()
{
     //unordered_set declare
     unordered_set<int> 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<int>::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 <bits/stdc++.h>
using namespace std;
int main()
{
     //unordered_multiset declare
     unordered_multiset<int> 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<int>::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++ STL通过激烈的问题解决过程来训练和掌握这些概念。

赞(0) 打赏
未经允许不得转载:srcmini » set,multiset,unordered_set,unordered_multiset之间的差异
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者

微信扫一扫打赏