zoukankan      html  css  js  c++  java
  • Using a Comparison Function for the Key Type

    (这是C++系列随笔的第二篇,这一系列是我练习C++而查的资料)

    extracted from C++ Primer 5th. edition pp. 425


    Using a Comparison for the Key Type

    The type of the operation that a container uses to organize its elements is part of the type of that container. To specify our own operation, we must supply the type of that operation when we define the type of an associative container (including prioroty_queue). The operation type is specified following the element type inside the angle brackets that we use to say which type of container we are defining. (We are actually required to define a parameter type rather than to pass an argument.)

    Each type inside the angle brackets is just that, a type (please pay attention to this sentence). We supply a particular comparison operation (more generally, a callable object: a pointer to function or a function object) of the specified type (that must have the same type as specified inside the angle brackets, and conversely we msut specify the type inside the angle brackets the same type as the constructor argument we are going to and allowed to supply (from outside? sounds subtle...)) when we create a container.

    (C++ Primer, 5th. Ed. pp. 249)


    Related Topic:

    Function Pointer Parameters

    Just as with arrays, we cannot define parameters of function type but can have a parameter that is a pointer to function. As with arrays, we can write a parameter that looks like a function type (when declaring or defining a function), but it will be treated as a pointer:

    //third parameter is a function type and is automatically treated as a pointer to function
    void useBIgger(const string &s1, const string &s2, 
                    bool pf(const string &, const string &));
    //equivalent declaration: explicitly define the parameter as a pointer to function
    void useBIgger(const string &s1, const string &s2, 
                    bool (*pf)(const string &, const string &));

    However we cannot do so when defining the type of an associative container (a parameter that looks like a functoin type will not be treated as a pointer, and thus illegal):

    //error
    priority_queue<P, vector<P>, bool (const P&, const P&)> que(cmp);
    //OK
    priority_queue<P, vector<P>, bool (*) (const P&, const P&)> que(cmp);
    //a simplified declaration using decltype
    priority_queue<P, vector<P>, decltype(cmp)*> que(cmp);
  • 相关阅读:
    multilabel-multiclass classifier
    关于zabbix _get返回Could not attach to pid的问题
    python导出环境依赖到req,txt文件中
    inode满的解决方法
    搞定面试官:咱们从头到尾再说一次 Java 垃圾回收
    SpringBoot项目,如何优雅的把接口参数中的空白值替换为null值?
    万万没想到,JVM内存区域的面试题也可以问的这么难?
    万万没想到,面试中,连 ClassLoader类加载器 也能问出这么多问题…..
    npm私服verdaccio报sha错误的解决方案
    配置SQL Server 2016无域AlwaysOn(转)
  • 原文地址:https://www.cnblogs.com/Patt/p/4831021.html
Copyright © 2011-2022 走看看