马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
Kites rise highest against the wind,not with it.
Set
set:所有元素都会在插入时自动被排序
set/multiset属于关联式容器,底层结构是用二叉树实现。
set和multiset区别:
set不允许容器中重复的元素——插入数据的同时会返回插入的结果,表示插入是否成功
multiset允许容器中有重复的元素——不会检测结果
#include<iostream>
#include<set>
using namespace std;
class Setcompare
{
public:
bool operator()(int v1,int v2)
{
return v1 > v2;
}
};
void printset(set<int>&s)
{
for(set<int>::iterator it = s.begin(); it != s.end(); it++)
{
cout << *it << " ";
}
cout << endl;
}
void test1()
{
set<int> s1;
s1.insert(10);
s1.insert(49);
s1.insert(57);
s1.insert(20);
//set元素插入时会自动排序,不允许插入重复值
printset(s1);
//拷贝构造
set<int> s2(s1);
printset(s2);
//赋值
set<int> s3;
s3 = s2;
printset(s3);
}
void test2()
{
set<int> s1;
s1.insert(10);
s1.insert(50);
s1.insert(30);
s1.insert(83);
if ( s1.empty() )
{
cout << "s1为空!!!!!!!" << endl;
}
else
{
cout << "s1不为空!!!!!!!!!!" << endl;
cout << "s1的大小为: " << s1.size() << endl;
}
set<int> s2;
s2.insert(56);
s2.insert(27);
s2.insert(47);
s2.insert(83);
cout << "交换前!!!!!!!!!!" << endl;
printset(s1);
printset(s2);
cout << "交换后!!!!!!!!!!!!" << endl;
s1.swap(s2);
printset(s1);
printset(s2);
}
void test3()
{
set<int>s1;
s1.insert(22);
s1.insert(10);
s1.insert(48);
s1.insert(33);
printset(s1);
//删除
s1.erase(s1.begin());//在这里一定要注意一点,他这里删除的是最小的,因为是在排序的基础上在删除的
printset(s1);
s1.erase(33);
printset(s1);
//清空
s1.erase(s1.begin(),s1.end());
s1.clear();
printset(s1);
}
void test4()
{
set<int> s1;
s1.insert(11);
s1.insert(52);
s1.insert(39);
s1.insert(65);
set<int>::iterator a = s1.find(11);
if ( a != s1.end())
{
cout << "找到元素: " << *a << endl;
}
else
{
cout << "未找到元素!!!!!! " << endl;
}
int num = s1.count(52);
cout << "num = " << num << endl;
s1.insert(52);
s1.insert(52);
num = s1.count(52);
cout << "num = " << num << endl;
//在set中,没有重复的数字,所以统计出来的结果不是0就是1
}
void test5()
{
set<int> s1;
s1.insert(80);
s1.insert(20);
s1.insert(76);
s1.insert(33);
//默认升序
printset(s1);
set<int,Setcompare>s2;
s2.insert(65);
s2.insert(75);
s2.insert(28);
s2.insert(47);
//降序
for(set<int>::iterator it = s2.begin(); it != s2.end(); it++)
{
cout << *it << " ";
}
cout << endl;
}
int main()
{
test1();//set构造和赋值
test2();//set大小和交换
test3();//set插入和删除
test4();//set查找和统计
test5();//set排序
return 0;
}
|