考试中用set(c++自带的封装起来的红黑树)可以轻松水过平衡树,效率也很高。
所以要稍稍存一下set具体怎么用了。
multiset可以有重复的值,而set没有。
include<set>
multiset<int> st;
st.clear()//清空
st.insert(10)//插入元素10
st.erase(10)//删除元素10
st.begin()//返回第一个元素
st.end()//返回最后一个
st.empty()//判空
st.size()//返回其大小
这些是最基础的,而考试中最总要的是如何利用指针it
创建定位器,具体删除操作
erase(iterator) ,删除定位器iterator指向的值
erase(first,second),删除定位器first和second之间的值
erase(key_value),删除键值key_value的值
-
set<int> s;
-
set<int>::const_iterator iter;
-
set<int>::iterator first;
-
set<int>::iterator second;
-
for(int i = 1 ; i <= 10 ; ++i)
-
s.insert(i);
-
-
s.erase(s.begin());
-
-
first = s.begin();
-
second = s.begin();
-
second++;
-
second++;
-
s.erase(first,second);
-
-
s.erase(8);
元素检索
find()若找到,返回该键值迭代器的位置,否则,返回最后一个元素后面一个位置。
-
<span style="font-size:18px;">set<int> s;
-
set<int>::iterator it;
-
it=s.find(5);
-
if(it!=s.end())
-
cout<<*it<<endl;
-
else
-
cout<<"未找到";</span>
查找前驱和后继
-
<span style="font-size:18px;">set<int> s;
-
s.insert(1);
-
s.insert(3);
-
s.insert(4);
-
cout<<*s.lower_bound(2)<<endl;
-
cout<<*s.lower_bound(3)<<endl;
-
cout<<*s.upper_bound(3)<<endl;</span>