set容器简介:
set是一个容器,它用于储存数据并且能从一个数据集合中取出数据。
它的每一个元素的值必须是唯一的,而且系统会根据该值来自动讲数据排序。每个元素的值不能直接改变。
头文件#include<set>
set的内部排序默认也是less<key>,key为关键字,就是数据类型
它提供一个双向的定位器来读写取数据;
它已经很据关键字和一个比较函数来排好序了;
它的每一个关键字都是唯一的,因此每一个值最多与一个元素对应
它是一个简单的容器,因为它的元素就是他的关键字
它是一个模板类, 因为它提供了一个一般且具有独立性的容器
1.set::insert
功能:插入一个数
2.set::begin
功能:返回第一个元素的定位器(iterator)的地址
#include<cstdio>
#include<cstring>
#include<set>
#include<algorithm>
using namespace std;
int main()
{
set<char>st;
set<char>::iterator cp;//定位器
st.insert('a');
st.insert('b');
cp=st.begin();//定位到st的开始位置
printf("%c\n",*cp);
}
3.set::end
功能:返回存储结束的地址
遍历所有set里面的值
#include<cstdio>
#include<cstring>
#include<set>
#include<algorithm>
using namespace std;
int main()
{
set<char>st;
st.insert('a');
st.insert('b');
for(set<char>::iterator i=st.begin();i!=st.end();i++)
printf("%c",*i);
}
在这里加上一个反向迭代器reverse_iterator
#include<cstdio>
#include<cstring>
#include<set>
#include<algorithm>
using namespace std;
int main()
{
set<char>st;
st.insert('a');
st.insert('b');
for(set<char>::reverse_iterator i=st.rbegin();i!=st.rend();i++)
printf("%c",*i);
}
上面注意begin和end前面都加上了一个r
4.set::erase
功能:与插入相同,可以高效的删除,并自动调整平衡
#include<cstdio>
#include<cstring>
#include<set>
#include<algorithm>
using namespace std;
int main()
{
set<char>st;
st.insert('a');
st.insert('b');
st.insert('c');
st.erase('b');
for(set<char>::reverse_iterator i=st.rbegin();i!=st.rend();i++)
printf("%c",*i);
}
功能:讲一个set容器的全部元素删除.
#include<cstdio>
#include<cstring>
#include<set>
#include<algorithm>
using namespace std;
int main()
{
set<char>st;
st.insert('a');
st.insert('b');
st.clear();
if(st.empty())
{
printf("已清楚掉所有\n");
}
}
6.set::find,若找到,返回的是迭代器的位置,否则返回最后一个元素后面的一个位置(结束位置)
#include<cstdio>
#include<cstring>
#include<set>
#include<algorithm>
using namespace std;
int main()
{
set<char>st;
st.insert('a');
st.insert('b');
st.insert('c');
set<char>::iterator i=st.find('b');
if(i==st.end())
printf("没有找到\n");
else
printf("%c",*i);
}