34-【什么叫规矩 什么叫体统】set容器

#include
#include
#include
using namespace std;
/*

set容器特性
set容器插入时就排序(底层二叉树),
set不可重复,重复的去重了,numltset可以
不支持resize()
*/
void printSet(set<int>&s)
{
    for(set<int>::iterator it = s.begin();
    it != s.end();it++)
    {
        cout << *it << " ";
    }
    cout << endl;
}

//构造赋值
void test_35()
{
    set<int>s1;

    //插入只能insert
    s1.insert(10);
    s1.insert(30);
    s1.insert(50);
    s1.insert(40);
    s1.insert(60);
    s1.insert(60);

    printSet(s1);

    //拷贝构造
    set<int>s2(s1);
    printSet(s2);

    //赋值
    set<int>s3;
    s3 = s2;
    printSet(s3);

}


//大小和交换
void test_36()
{
    set<int>s1;

    //插入只能insert
    s1.insert(10);
    s1.insert(30);
    s1.insert(50);
    s1.insert(40);
    s1.insert(60);
    s1.insert(60);

    printSet(s1);
    cout << "是否为空:"<<s1.empty()<<endl;
    cout << "set 大小(元素个数):"<<s1.size() << endl;

    //交换
    set<int>s2;

    //插入只能insert
    s2.insert(11);
    s2.insert(33);
    s2.insert(55);
    printSet(s2);
    s2.swap(s1);
    cout << "交换后:" <<endl;
    printSet(s2);

}


//插入删除
void test_37()
{
    //insert/erase/clear
    set<int>s1;

    //插入只能insert
    s1.insert(11);
    s1.insert(33);
    s1.insert(55);
    printSet(s1);

    //删除
    set<int>::iterator it = s1.begin();
    s1.erase(++it);
    printSet(s1);

    //删除-重载版
    s1.erase(55);
    printSet(s1);

    //清空
    s1.erase(s1.begin(),s1.end());
    printSet(s1);

    s1.clear();
    printSet(s1);


}


//查,统计
void test_38()
{
    //find 找到给位置,找不到返回最后
    //count 0/1

    set<int>s1;

    s1.insert(11);
    s1.insert(33);
    s1.insert(55);
    printSet(s1);
    set<int>::iterator it= s1.find(11);//返回迭代器

    cout<<"查找 11:  "<<*it<<endl;
    cout<<"统计 11:  "<<s1.count(11)<<endl;

}


//set multiset区别
void test_39()
{
    set<int>s1;


    pair<set<int>::iterator,bool> ret = s1.insert(11);
    cout << "set = " << ret.second << endl;

    ret = s1.insert(11);
    cout << "set = " << ret.second << endl;
    s1.insert(33);
    s1.insert(55);

    multiset<int> ms;
    set<int>::iterator place = ms.insert(11);
    cout << "place = " << *place << endl;

    ms.insert(11);

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




}


//pair队组
void test_40()
{
    //创建方式一
    pair<string,int>p("tom",20);

    cout << "arg-1:" << p.first << " arg-2:" << p.second <<endl;

    //创建队组方式二
    pair<string,int>p2 = make_pair("jarry",30);
    cout << "arg-1:" << p2.first << " arg-2:" << p2.second <<endl;

}




class Dog
{
public:
    Dog(string name,int age)
    {
        this->m_age = age;
        this->m_name = name;
    }
    int m_age;
    string m_name;
};
class compareDog
{
public:
    bool operator()(const Dog &d1,const Dog &d2)
    {
        return d1.m_age < d2.m_age;
    }
};
class myCompare
{
public:
    bool operator()(int v1,int v2)
    {
        return v1 > v2;
    }
};
//排序
void test_41()
{
    //仿函数 set内置数据类型
    set<int,myCompare> s1; //指定排序规则-从大到小

    s1.insert(10);
    s1.insert(20);
    s1.insert(30);
    s1.insert(40);
    s1.insert(50);
    for(set<int,myCompare>::iterator it = s1.begin();
    it != s1.end();it++)
    {
        cout << *it << " ";
    }
    cout <<endl;



    //排序 set-自定义数据类型 (*必须指定排序规则)
    set<Dog,compareDog> s2;
    Dog d1("lele",12);
    Dog d2("haha",15);
    Dog d3("mimi",2);
    Dog d4("dahuang",12);

    s2.insert(d1);
    s2.insert(d2);
    s2.insert(d3);
    s2.insert(d4);
    for(set<Dog,compareDog>::iterator it = s2.begin();
    it != s2.end();it++)
    {
        cout << (*it).m_age << " " << (*it).m_name << " |";
    }
    cout <<endl;

}
int main()
{
    test_35();
    test_36();
    test_37();
    test_38();
    test_39();
    test_40();
    test_41();
}

34-【什么叫规矩 什么叫体统】set容器_第1张图片

你可能感兴趣的:(c++)