美文网首页
multiset 自定义比较函数

multiset 自定义比较函数

作者: 依杖听江声 | 来源:发表于2017-03-13 10:46 被阅读0次
    #include <string>
    #include <iostream>
    #include <set>
    #include <memory>
    
    using std::shared_ptr;
    using std::multiset;
    using std::string;
    using std::cout;
    using std::endl;
    
    class MS{
        bool compareIsbn(const shared_ptr<string> &lhs,const shared_ptr<string> &rhs)
        {
            return *lhs < *rhs;
        }
        multiset<shared_ptr<string>, decltype(compareIsbn)*> item(compareIsbn);
    };
    int main(){ MS bbb;} 
    

    上面这一段代码在g++ 和 vs2015下都无法编译,错误提示为:

    error:compareIsbn 不是类型名

    调试了几个小时,推测有两个主要的原因:

    • 非静态成员函数compareIsbn不能作为自定义比较函数
    • 静态成员函数无法作为copy constructor参数,如果想使用静态成员函数作为比较函数,需要使用braced Initialization形式。
      附修改后的正确代码(只列出修改部分):
    static bool compareIsbn(const shared_ptr<string> &lhs,const shared_ptr<string> &rhs)
        {
            return *lhs < *rhs;
        }
    multiset<shared_ptr<string>, decltype(compareIsbn)*> item{compareIsbn};
    

    相关文章

      网友评论

          本文标题:multiset 自定义比较函数

          本文链接:https://www.haomeiwen.com/subject/gfjfnttx.html