• 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;
    }

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

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

    待补充。。。

  • 相关阅读:
    程序员都必读
    ia-64 vs x86-64
    Linux内核学习
    开源liscense对比
    列存储
    大数据科普
    [USACO1.5]数字三角形
    [USACO08FEB]酒店Hotel
    数的划分
    CodeForce 18D
  • 原文地址:https://www.cnblogs.com/OrdinaryMiracle/p/4397801.html
Copyright © 2020-2023  润新知