STL set 用法之 —— 自定义结构体

来源:互联网 发布:djvu阅读器 知乎 编辑:程序博客网 时间:2024/04/28 08:21

引自:http://blog.csdn.net/lihao21/article/details/6302196/
 

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