美文网首页
7.set容器排序

7.set容器排序

作者: lxr_ | 来源:发表于2021-04-22 10:55 被阅读0次
    #include<iostream>
    using namespace std;
    
    #include<set>
    #include<algorithm>
    #include<time.h>
    
    //set容器默认排序规则为从小到大,利用仿函数可以改变排序规则
    
    class Person
    {
    public:
        Person(string name, int age)
        {
            this->m_Name = name;
            this->m_Age = age;
        }
        string m_Name;
        int m_Age;
    };
    
    class MyCompare
    {
    public:
        bool operator() (int v1,int v2)const//注意加const为常函数,若成员属性未加mutable关键字,则在常函数内不可以修改
        {
            return v1 > v2;
        }
    
    };
    //set存放内置数据类型
    void test0701()
    {
        set<int> s1;
    
        s1.insert(210);
        s1.insert(340);
        s1.insert(232);
        s1.insert(2342);
        s1.insert(234543);
        s1.insert(4363);
    
        for (set<int>::iterator it = s1.begin(); it != s1.end(); it++)
        {
            cout << (*it) << " ";
        }
        cout << endl;
    
        set<int,MyCompare> s2;
    
        s2.insert(210);
        s2.insert(340);
        s2.insert(232);
        s2.insert(2342);
        s2.insert(234543);
        s2.insert(4363);
    
        for (set<int, MyCompare>::iterator it = s2.begin(); it != s2.end(); it++)
        {
            cout << (*it) << " ";
        }
        cout << endl;
        
        
    }
    class ComparePerson
    {
    public:
        bool operator()(const Person p1,const Person p2)const
        {
            //按照年龄的降序排序
    
            return p1.m_Age > p2.m_Age;
        }
    };
    //set存放自定义数据类型(自定义数据类型都会指定排序规则)
    void test0702()
    {
        set<Person,ComparePerson> s;
        for (int i = 0; i < 10; i++)
        {
            string nameSeed = "ABCDEFGHIJ";
            string name = "学生";
            name += nameSeed[i];
    
            int age = rand() % 21 + 20;
    
            Person p(name, age);
    
            s.insert(p);
        }
    
        for (set<Person,ComparePerson>::iterator it = s.begin(); it != s.end(); it++)
        {
            cout << "姓名:" << it->m_Name << "\t"
                << "年龄:" << it->m_Age << endl;
        }
    }
    
    int main()
    {
        srand((unsigned int)time(NULL));
    
        test0701();
    
        test0702();
    
        system("pause");
        return 0;
    }
    

    相关文章

      网友评论

          本文标题:7.set容器排序

          本文链接:https://www.haomeiwen.com/subject/zjhilltx.html