std::set mutliset自定义结构体的排序规则 自定义结构体指针的排序

作者: admin 分类: C++ 发布时间: 2020-08-01 09:26
#include <iostream>
#include <set>
using namespace std;
/*Student结构体*/
struct Student {
    string name;
    int age;
    string sex;
};
/*“仿函数"。为Student set指定排序准则*/
class SortCriterion 
{
public:
    bool operator() (const Student& a, const Student& b) const {
        /*先比较名字,小的返回true*/
        if (a.name < b.name )
        {
            return true;
        }
        else
        {
            return false;
        }
    }
};
int main()
{
    set<Student, SortCriterion> stuSet;
    Student stu1, stu2, stu3, stu4;
    stu1.name = "张三";
    stu1.age = 13;
    stu1.sex = "male";
    stu2.name = "李四";
    stu2.age = 23;
    stu2.sex = "female";
    stu3.name = "Wangwu";
    stu3.age = 27;
    stu3.sex = "male";
    stu2.name = "ZHaoliu";
    stu2.age = 16;
    stu2.sex = "female";
    stuSet.insert(stu1);
    stuSet.insert(stu2);
    stuSet.insert(stu3);
    stuSet.insert(stu4);
    /*构造一个测试的Student,可以看到,即使stuTemp与stu1实际上并不是同一个对象,
     但当在set中查找时,仍会查找成功。这是因为已定义的SortCriterion的缘故。
     */
    Student stuTemp;
    stuTemp.name = "ZHaoliu";
    set<Student, SortCriterion>::iterator iter = stuSet.find(stuTemp);
    if (iter != stuSet.end()) 
    {
        cout << "Find the student: " << (*iter).name << endl;
    }
    else 
    {
        cout << "Cannot find the student!" << endl;
    }
    return 0;
}

比较函数也可以写在内部

struct Student {
    string name;
    int age;
    string sex;
bool operator <(const Student& other)const
{
//....
}
};

对于set中存放结构体指针,可定义类似函数来排序

class SortCriterion 
{
public:
    bool operator() (const Student* a, const Student* b) const {
        return (*a) < (*b);
    }
};

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!

发表评论

标签云