保存的对象是唯一的,有序的,默认是less,采用红黑树结构
set<int> ss{1,2,3,6};
// 从大到小
set<int,greater<int>> ss1{2,5,7,1,9};
//单个的赋值
ss.insert({7,8});
//因为迭代器没发直接+-,所以需要使用函数(可以使用++或--
auto iter=ss1.end();
advance(iter,-2);
cout<<*iter<<endl;
ss.insert(ss1.begin(),iter);
//inset于emplace是一对的,只能写一个元素
ss.emplace(14);
set<int> ss;
//清空set
ss.clear();
//返回某个元素的个数
ss.count(2);
//找到被找元素的迭代器,若无即end()
ss.find(5);
//集合元素个数
ss.size();
//返回大于(或等于)某值得第一个元素
ss.lower_bound(2);
//返回大于某值的迭代器,没有即end()
ss.upper_bound(2);
//删除集合中的元素
ss.erase(2); //值为2的元素
ss.erase(ss.begin()); //删除迭代器为ss.begin()的元素
ss.erase(ss.begin(),ss.end()); //删除某一区间,从ss.begin()(包含)开始到ss.end()(不包含)
multiset容器于set容器相似,有序的.只是它可以保存重复的对象,采用红黑树结构
元素在位置有元素的哈希值确定,所以它是无序的,元素不重复.其余实现的功能和set类似,函数及其赋值也类似
与unordered_multiset类似,只是元素可以重复,同样无序,采用哈希表
map
把key映射为value,按照key值排序,key唯一,采用红黑树
map<int,int,greater<int>> ma{{1,2},{3,4}};
ma.insert({6,7});
ma[12]=56;
ma.emplace(10,12);
map<int,int> ma;
//清空map
ma.clear();
//找到被找元素的迭代器,若无即end()
ma.find(5);
//集合元素个数
ma.size();
//返回大于(或等于)某key值得第一个元素
ma.lower_bound(2);
//返回大于某key值的迭代器,没有即end()
ma.upper_bound(2);
//删除集合中的元素
ma.erase(2); //值为2的元素
ma.erase(ma.begin()); //删除迭代器为ma.begin()的元素
ma.erase(ma.begin(),ma.end()); //删除某一区间,从ma.begin()(包含)开始到ma.end()(不包含)
与map类似,使用红黑树,有序,key可重复
multimap不能使用下标运算符
//如何通过key得到所有元素
//使用equal_range()
//它会返回一个封装了两个迭代器的pair对象,这两个迭代器所确定范围内的元素的key相等
multimap<int,int> mp;
auto iter=mp.equal_range(12);
if(iter.first!=mp.end()){
for(auto iter1=iter.first;iter1!=iter.second;++iter1)
cout<<iter1->first<<' '<<iter1->second<<endl;
}
使用哈希表结构,元素不可重复,无序
其余部分和map相似
使用哈希表,元素可重复,无序
单个value可以使用find访问这个元素,多个可以使用equal_range()
队列,先进先出,头部为先进队的元素
back(); 返回最后一个元素
empty();如果队列为空返回真
pop(); 删除第一个元素
push();在末尾加一个元素
front();返回头部元素
size();返回队列元素的个数
优先队列,采用大顶堆或小顶堆结构
自动排序
empty();优先队列为空,返回真
pop() 删除第一个元素
size();元素个数
top();优先队列队顶元素
栈 后进先出 栈顶为后进入的元素
empty();堆栈为空则返回真
pop(); 删除栈顶元素
push(); 在栈顶增加元素
size(); 栈中元素个数
top(); 返回栈顶元素
// 创建长度为10位的bitset
bitset<10> bs;
//重置bitset(全为0)
bs.reset();//全部
bs.reset(3);//某一位置
// 如果有位被设为1,返回真
bs.any();
// 如果没有位被设为1返回真
bs.none();
//被设为1的位的个数
bs.count();
//反置,即0变1,1变0
bs.flip();//所有位
bs.flip(2);//指定位置的反置
//设置
bs.set(2,1);//2号位置设为1
//返回bitset的字符串形式
bs.to_string();
//返回无符号长整型形式
bs.to_ulong();