STL-set&&multiset 集合

#include <iostream>
#include <cstdio>
#include <set>

// 仿函数的原型
//struct greaters
//{
//    bool operator()(const int &left,const int &right) const
//    {
//        return left>right;
//    }
//};

using namespace std;

int main()
{
    // set容器,元素具有唯一性,但与寻常集合 不同,它是有序的
    // 元素必修顺序插入,不能在指定位置插入
    // 内部结构为红黑二叉树,加入数据的效率居然比vector还快?反正我信了

    // list与vec的比较
    //对于忘list中插入数据,很好理解,分配一个新的结点空间,添加到链表尾部即可
    //对于往vectorz中添加数据,需要判断当前控件是否够用,不够用的话需要再次分配稍大的一些空间
    // 然后把已有的元素拷贝到新的空间区域,然后释放已有的空间。
    // 也许有人觉得这个拷贝操作很费时,觉得没有list添加的速度快,然而,事实并不是这样…..

    // 好了,再回归set
    // insert,插入函数,重复失败,返回pair类型
    // 复杂的数据类型,需要用仿函数确定元素的顺序

    set<int> set1;
    set1.insert(10);
    set1.insert(20);
    set1.insert(5);

    for(set<int>::iterator it=set1.begin();it!=set1.end();++it)
    {
        cout<<*it<<‘ ‘;
    }
    cout<<endl;

    set1.erase(set1.begin());

    for(set<int>::iterator it=set1.begin();it!=set1.end();++it)
    {
        cout<<*it<<‘ ‘;
    }
    cout<<endl;

    // 默认是从小到大的顺序
    // set<int,less<int>> set1;
    // 从大到小的顺序是

    // set<int,greaters<int>> set2;

    pair<set<int>::iterator,bool> pair1=set1.insert(50);
    cout<< *pair1.first <<endl;
    if(pair1.second==true)
    {
        cout<<"YES"<<endl;
    }

    pair1=set1.insert(20);

    cout<<pair1.second<<endl;


    // set的数据查找
    // lower_bound
    // upper_bound
    // equal_bound

    // 查找小于等于10的元素的位置
    cout<<*set1.lower_bound(10)<<endl;
    // 查找大于20的元素的位置
    // 注意,这里没有等于哈
    cout<<*set1.upper_bound(20)<<endl;

    for(set<int>::iterator it=set1.begin();it!=set1.end();++it)
    {
        cout<<*it<<‘ ‘;
    }
    cout<<endl;

    // 查找大于等于20的元素的位置
    cout<<* set1.equal_range(20).first<<endl;
    cout<<* set1.equal_range(20).second<<endl;

    // multiset ,元素可以重复,其余基本操作相似

     return 0;
}