今天系统的学习了stl中集合相关的容器set
以下是对f_zyj大佬模板中提供的set函数的测试和注解
f_zyj大佬的博客:
http://blog.csdn.net/f_zyj/article/details/51594851
地址为pdf中第11页
#define pause system("pause");
#define fence puts("-------------");
#include <iostream>
#include <set>
using namespace std;
int main()
{
set<int>s; //定义
fence;
cout << s.max_size() << '\n'; //集合容纳最大数目
fence;
s.insert(1); //插入元素
s.insert(1); //重复元素无效
s.insert(2);
s.insert(0);
fence;
cout << s.size() << '\n'; //元素个数
cout << s.count(1) << '\n'; //1的个数
fence;
for (auto it = s.begin(); //set自动将元素转化为有序
it != s.end(); ++it) //规则默认从小到大
cout << *it << endl; //可以自行创建规则
fence;
s.insert(9);
for (auto it = s.rbegin(); //反向遍历
it != s.rend(); ++it)
cout << *it << endl;
fence;
auto it = s.find(9); //查找元素返回迭代器
s.erase(it); //删除元素
fence;
auto it2 = s.lower_bound(1); //返回<=1的第一个元素的迭代器
cout << *it2 << '\n';
it2 = s.upper_bound(1); //返回 >1的第一个元素的迭代器
cout << *it2 << '\n';
fence;
auto fuc = s.value_comp(); //返回这个集合的比较函数
cout << fuc(1,2) << endl; //这里返回一个bool值
fence;
set<int>ss;
s.swap(ss); //交换内容
s.swap(ss);
auto pr = s.equal_range(1); //返回pair(lower_bound,upper_bound)
cout << *pr.first << '\n' << *pr.second << '\n';
s.clear(); //清空所有元素
s.get_allocator(); //用于构造集合,暂时不懂,准备单独一篇研究
pause
}
/*
运行结果:
-------------
214748364
-------------
-------------
3
1
-------------
0
1
2
-------------
9
2
1
0
-------------
-------------
1
2
-------------
1
-------------
1
2
*/
另外multiset类可以存在重复元素,功能与set几乎相似
multiset的count返回元素个数