1.定义及初始化
#include <unordered set>
#include <iostream>
using namespace std;
//输出s中的所有元素
template<typename T>
void Show(const T& s)
{
for(auto&x:s)
cout << x<<" ";cout << endl;
}
int main()
{
unordered_set<int>s1;//定义一个空的无序set
unordered_set<int>s2{5,5,3,9,35,8,21,4};//通过列表创建无序set
unordered multiset<int>s3{5,5,3,9,35,8,21,4};//通过列表创建无序multiset
unordered_multiset<int>s4{s2.begin(),s2.end()};//通过迭代器区间创建无序multiset
unordered multiset<int>s5=s3;//通过s3构造s5
cout<<"s1:"; Show(s1);
cout <<"s2:";Show(s2);
cout<<"s3:";Show(s3);
cout <<"s4:";Show(s4);
cout<<"s5:";Show(s5);
return 0;
}
说明:
s2不能存放相同的元素,s3可以存放相同的元素,
不能对数据的存放顺序做任何假设。初始化的顺序和输出的顺序没有任何关联。特别是s5和s3
的顺序也不相同。
2.添加或删除元素
通过insert函数插入数据。
通过erase删除元素。
下面示例演示基本用法,insert和erase更详细的用法请参考后面函数详细介绍。
//输出s中的所有元素
template<typename T>
void Show(const T& s)
{
for(auto&x:s)
cout << x<<" ";cout << endl;
}
int main()
{
vector<int>v{9,12,34,56};//创建一个向量v
unordered_set<int>s1;//定义一个空的无序set
s1.insert(3);//插入当个元素
s1.insert({5,2,1,9});//插入一个列表(多个元素)
s1.insert(v.begin(),v.end());//插入一个迭代器区间(多个元素)
cout<<"s1:";Show(s1);
s1.erase(1);//删除元素1
cout<<"删除1后"<<endl;
cout<<"s1:";Show(s1);
return 0;
}
3.常用迭代器
只支持forward迭代器(向前迭代器)
int main()
{
unordered_multiset<int>s{1,1,2,3,40,5,6,7,8};//创建一个无序的multiset
for(auto it=s.cbegin();it != s.cend();++it)//通过迭代器输出所有元素
cout << *it << "";return 0;
}
4.常用运算符
无序容器,存放数据的位置不能确定,即使相同的数据,存放的位置都可能不同,所以不提供>,<等判断
//输出s中的所有元素
template<typename T>
void Show(const T& s)
{
for(auto&x:s)
cout << x<<" ";
cout << endl;
}
int main()
{
unordered_multiset<int>s1{5,5,3,9,35,8,21,4};//通过列表创建无序multiset
unordered multiset<int>s2=s1;//通过s1构造s2
cout<<"s1:";Show(s1);
cout<<"s2:";Show(s2);
if(s1 == s2)
cout<<"s1 == s2"<< endl;s1.insert(1);
cout<<"向s1插入1后"<< endl;
if(s1 != s2)
cout <<"s1 != s2"<< endl:
return 0;
}
5.常用成员函数
insert成员函数
//输出s中的所有元素
template<typename T>
void Show(const T& s)
{
for(auto&x:s)
Cout << x<<" ";
cout<< endl;
}
int main()
{
unordered_set<int>s1{10,20,30,40};//创建一个无序集合对象
vector<int>v{21,22,23};
//创建一个向量对象
//插入一个元素
s1.insert(5);
//提示在begin(迭代器)后面插入,以实际为准
s1.insert(s1.begin(),7);
s1.insert({ 11,12,13,14,15 });//插入多个元素(一个列表)
s1.insert(v.begin(),v.end());//插入一个迭代器区间
cout<<"s1:";Show(s1);
return 0;
}
erase成员函数
其函数原型如下
iterator erase(const_iterator Where);
iterator erase( const_iterator First,const_iterator Last);
size_type erase( const key_type& Key);
//输出s中的所有元素
template<typename:T>
void Show(const T& s)
{
for(auto&x:s)
cout << x<<" ";
cout<< endl;
}
int main()
{
unordered set<int>s1{1,2,3,4,5};
cout<<"s1:";Show(s1);
s1.erase(1);//删除一个值
cout<<“删除1后,s1:"; Show(s1);
s1.erase(++s1.begin(),s1.end());//删除一个迭代器区间
cout<<"只保留第一个元素,s1:";Show(s1);
return 0;
}