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;