STL之set

C++模板库的使用庞大而复杂,故记录一下学习过程,和各种不明白

set集合自定义比较函数:两种方式------比较函数作为模板参数、比较函数作为set集合构造函数的参数。

先记录比较函数作为模板参数:

//模板原型:
template < class T, // set::key_type/value_type class Compare = less<T>, //set::key_compare/value_compare class Alloc = allocator<T> // set::allocator_type > class set;

class T:集合存储的元素类型,class Compare:比较函数,class Alloc:目前不知道,分配内存吧。

默认的比较函数的模板参数是:less<T>,还有greater<T>;用于C++内置类型或者重载了“<"操作符的类

不知道为啥我写的代码,不能用greater<T>。代码如下:

#include <set>
#include <iostream>
#include <string>

using namespace std;

class Info
{
    public:
        bool operator < (const Info &a) const
        {
            return a.score < score;
        }
        
        string name;
        float score;
};

int main()
{
    set< Info,greater<Info> > s;
    
    Info info;
    
    info.name = "jack";
    info.score = 80.5;
    s.insert(info);
    
    info.name = "tomi";
    info.score = 20.5;
    s.insert(info);
    
    info.name = "Nacy";
    info.score = 60.5;
    s.insert(info);
    
    //set<int>::iterator it;
    set< Info, greater<Info> >::iterator it;
    
    for(it = s.begin(); it != s.end(); it++)
    {
        cout << (*it).name <<" : " << (*it).score << endl;
    }
    
    cout << endl;
    
    return 0;
}

可以自定义比较函数:非结构或类类型:重载“()”运算符;结构或类类型:重载“<”操作符。

记录比较函数作为构造函数的参数:

待补充。。。

原文地址:https://www.cnblogs.com/OrdinaryMiracle/p/4397801.html