stl总结

set

保存的对象是唯一的,有序的,默认是less,采用红黑树结构

set的赋值

    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的函数

    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

multiset容器于set容器相似,有序的.只是它可以保存重复的对象,采用红黑树结构

unordered_set

元素在位置有元素的哈希值确定,所以它是无序的,元素不重复.其余实现的功能和set类似,函数及其赋值也类似

unordered_multiset

与unordered_multiset类似,只是元素可以重复,同样无序,采用哈希表

map

map 把key映射为value,按照key值排序,key唯一,采用红黑树

map的赋值

    map<int,int,greater<int>> ma{{1,2},{3,4}};
    ma.insert({6,7});
    ma[12]=56;
    ma.emplace(10,12);

map的函数

    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()(不包含)

multimap

与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;
    }

unordered_map

使用哈希表结构,元素不可重复,无序
其余部分和map相似

unordered_multimap

使用哈希表,元素可重复,无序
单个value可以使用find访问这个元素,多个可以使用equal_range()

queue

队列,先进先出,头部为先进队的元素

queue函数

	back(); 返回最后一个元素
	empty();如果队列为空返回真
	pop(); 删除第一个元素
	push();在末尾加一个元素
	front();返回头部元素
	size();返回队列元素的个数

priority_queue

优先队列,采用大顶堆或小顶堆结构
自动排序

	empty();优先队列为空,返回真
	pop() 删除第一个元素
	size();元素个数
	top();优先队列队顶元素

stack

栈 后进先出 栈顶为后进入的元素

	empty();堆栈为空则返回真
	pop(); 删除栈顶元素
	push(); 在栈顶增加元素
	size(); 栈中元素个数
	top(); 返回栈顶元素

bitset

    // 创建长度为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();

你可能感兴趣的:(日常篇,日常路程)