multiset 自定义比较函数

#include 
#include 
#include 
#include 

using std::shared_ptr;
using std::multiset;
using std::string;
using std::cout;
using std::endl;

class MS{
    bool compareIsbn(const shared_ptr &lhs,const shared_ptr &rhs)
    {
        return *lhs < *rhs;
    }
    multiset, decltype(compareIsbn)*> item(compareIsbn);
};
int main(){ MS bbb;} 

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

error:compareIsbn 不是类型名

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

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

你可能感兴趣的:(multiset 自定义比较函数)