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};
推荐阅读
- 汇讲-勇于突破
- SpringBoot调用公共模块的自定义注解失效的解决
- python自定义封装带颜色的logging模块
- 列出所有自定义的function和view
- 幸福是个比较级
- 呼吸练习心得
- 突然间感觉到写作的乏力
- C语言的版本比较
- Spring|Spring Boot 自动配置的原理、核心注解以及利用自动配置实现了自定义 Starter 组件
- r语言python|r语言python 比较_R语言vs Python(数据分析哪家强())