zoukankan      html  css  js  c++  java
  • Effective STL 学习笔记:19 ~ 20

    Effective STL 学习笔记:19 ~ 20

    1 Item 19: 相等 (Equality) 与等价 (Equivalence)

    在 STL 中, 相等 (Equality) 用于 find 算法中,通常通过 (operator ==) 来体现。而 等价 (Equivalence) 则经常用于排序,通常用 (operator <) 来体现,等价的对象不一定相等,只要他们满足满足下面条件,二者即可视为等价:

    egin{cases} & !(w1 < w2)\ & !(w2 < w1) end{cases}

    2 Item 20: Specify Comparison Type for Associative containers of pointers

    对于存放指针的 Associative Containers 而言,如果我们不指定排序算法,则默认按照 指针 大小去排,对象指针我们无法控制,他们在容器中的排列顺序我们也就无法控制。如果我们需要指定其排序顺序,需自己指定 Comparison Type,例如:

    class StrLessFunctor
    {
    public:
        StrLessFunctor(){}
        virtual ~StrLessFunctor(){}
        bool operator()(const string* ps1, const string* ps2)
        {
            return *ps1 < *ps2;
        }
    };
    
    int main(int argc, char *argv[])
    {
        set<string*, StrLessFunctor> ssp;
        ssp.insert(new string("Banana"));
        ssp.insert(new string("Orange"));
        ssp.insert(new string("Apple"));
    
        for_each(ssp.begin(), ssp.end(), [](string* s){cout << *s << endl;});
        return 0;
    }
    

    构造 set 时候指定的第二个模板参试不是一个函数,而是一个类型 (Comparison Type), set 会用该类型来初始化出来一个用于 sort 的函数。

  • 相关阅读:
    CSS选择器
    结构体
    指针的话题
    安卓开源项目周报0208
    前端开源项目周报0207
    iOS开源项目周报0119
    安卓开源项目周报0117
    前端开源项目周报0116
    微信小程序开源项目库汇总
    iOS开源项目周报0112
  • 原文地址:https://www.cnblogs.com/yangyingchao/p/3406321.html
Copyright © 2011-2022 走看看