set特点
1.底层是红黑树
2.默认对数据进行去重加升序排序操作
3.less是升序排序(默认升序)
set<int> st={5,5,4,3,2,1,6,7,7,8,9};
set<int,less<int>> st1={5,4,3,2,1};
for(auto it:st1){
cout<<it<<" ";
}
4.greater是降序排序
set<int,greater<int>> st={5,5,4,3,2,1,6,7,7,8,9};
for(auto it:st){
cout<<it<<" ";
}
5.要想增加集合元素只能通过insert插入
for(int i=1;i<=n;i++){
int x;cin>>x;
st.insert(x);
}
6.插入一个元素的时间复杂度为O(logn),插入n个数据时间复杂度为O(nlogn)
因为它默认对数据进行去重加升序排序,所以它排序的时间复杂度为O(nlogn)
7.打印set里面元素的方法有俩种
迭代器访问
for(auto iter=st.begin();iter!=st.end();iter++){
cout<<*iter<<" ";
}
C++for range 增强for循环
for(auto it:st){
cout<<it<<" ";
}
内置函数
1.st.find()
在set种查找相当于在树中查找,它的时间复杂度为logn
st.find(val)–>查找成功返回对应位置的迭代器,失败返回无效迭代器end
auto iter=st.find(x);
if(iter!=st.end()){
cout<<"find!"<<" "<<*iter<<endl;
}
else cout<<"no find!"<<endl;
2.st.lower_bound(x)
寻找第一个大于等于x的数,找到了返回它的迭代器,没找到返回无效迭代器
int x;cin>>x;
auto iter=st.lower_bound(x);
if(iter!=st.end()){
cout<<"find!"<<" "<<*iter<<endl;
}
else cout<<"no find!"<<endl;
3.st.upper_bound(x)
寻找第一个大于x的数,找到了返回它的迭代器,没找到返回无效迭代器
auto iter=st.upper_bound(x);
if(iter!=st.end()){
cout<<"find!"<<" "<<*iter<<endl;
}
else cout<<"no find!"<<endl;