#include
#include
#include
using namespace std;
/*set容器 它底层使用平衡的搜索树——红黑树实现 默认会对元素排序
set只允许用一个值出现一次
*/
//set容器基本初始化
struct cmp
{
bool operator()(const int& a, const int& b)
{
return a > b;
}
};
void printTest(set
{
for (set
{
cout << *it << " ";
}
cout << endl;
}
void printTest(set
{
for (set
{
cout << *it << " ";
}
cout << endl;
}
void test()
{
int a[] = {0,1,5,6,3,8};
set
for (set
{
cout << *it << " ";
}
cout << endl;
set
set
for (set
{
cout << *it2 << " ";
}
cout << endl;
}
//set增删改查
void test2()
{
set
for (int i = 0; i < 5; i++)
{
s.insert(i); //插入
}
printTest(s);
int a[] = {5,2,6,10}; //相同的数插入时会失败(2)
s.insert(a,a+4);
printTest(s);
// s.erase(2); //删除单个数据
printTest(s);
set
for (set
{
if (*it == 2) //区间首部数据会被删除
{
sBegin = it;
}
else if (*it == 5) //尾部数据不会被删除
{
sEnd = it;
s.erase(sBegin, sEnd);
break;
}
}
printTest(s);
#if 0
s.clear();//清空
if (s.empty()) //判断是否为空
{
cout << "s为空~" << endl;
}
else
{
cout << "s不为空" << endl;
}
#endif
if (s.find(5) != s.end()) //查找单个元素,内部实现应该使用迭代器,没找到返回s.end()
{
cout << "5存在!" << endl;
}
else
{
cout << "5不存在!" << endl;
}
}
//set容器其他操作
void test3()
{
set
for (int i = 0; i < 5; i++)
{
s.insert(i); //插入
}
int a[] = { 5,2,6,10 }; //相同的数插入时会失败(2)
s.insert(a, a + 4);
printTest(s);
cout << "第一个大于等于6的数据:" << *s.lower_bound(6) << endl; //lower_bound返回第一个大于等于8的元素,返回的是一个迭代器
cout << "第一个大于3的数据" << *s.upper_bound(3) << endl; //upper_bound返回第一个大于3的元素,返回的是一个迭代器
}
//set容器自定义比较函数
void test4()
{
set
for (int i = 0; i < 5; i++)
{
s.insert(i); //插入
}
printTest(s);
}
int main()
{
//test();
//test2();
//test3();
test4();
return 0;
}