multiset|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 不是类型名
【multiset|multiset 自定义比较函数】调试了几个小时,推测有两个主要的原因:
  • 非静态成员函数compareIsbn不能作为自定义比较函数
  • 静态成员函数无法作为copy constructor参数,如果想使用静态成员函数作为比较函数,需要使用braced Initialization形式。
    附修改后的正确代码(只列出修改部分):
static bool compareIsbn(const shared_ptr &lhs,const shared_ptr &rhs) { return *lhs < *rhs; } multiset, decltype(compareIsbn)*> item{compareIsbn};

    推荐阅读