zoukankan      html  css  js  c++  java
  • 将自定义结构存入std::set 或者 std::map

    众所周知,std::set和std::map的底层使用红黑树作为排序算法,并且默认是升序排列。

    但是当我们的键值是一个结构体或者类的时候该怎么办呢 ?

    可以看到set的模板是这样实现的,默认比较函数是std::less

     

     而less的底层实现是这样的

     

     所以,照葫芦画瓢,当我们想要使用自定义结构作为键值的时候便可以自定义一个比较函数

    仅举例set,map用法相同

    struct stru
    {
        /* data */
        int a,b;
        stru(int _a){a=_a;}
    };
    
    struct myCompless
    {
        bool operator()(const stru& first, const stru& second) const
        {
            //升序:first.a < second.a
            //降序:first.a > second.a
            return first.a < second.a; 
        }
    };
    
    int main(void)
    {
        stru stru1(7),stru2(1),stru3(9),stru4(5);
        std::set<stru, myCompless> ss{stru1,stru2,stru3,stru4};
        for (auto item:ss)
        {
            printf("%d
    ",item.a);
        }
        
        return 0;
    }

     运行结果

    升序

    降序

  • 相关阅读:
    今日总结
    今日总结
    今日总结
    今日总结
    今日总结
    今日总结
    今日总结
    今日总结
    今日总结
    自学Java0721
  • 原文地址:https://www.cnblogs.com/jiguang321/p/13942314.html
Copyright © 2011-2022 走看看