c++ - 使用公共函数作为排序标准,C++;
问题描述
考虑这个例子,我想要用作比较器的公共函数更少。
PS我知道如果我改变它operator<
会起作用。
class A {
std::string str;
int id;
public:
virtual bool less(A const& rhs) const{
return id < rhs.id;
}
};
int main()
{
std::set<A, A::less> s;
}
这给了我一个错误,即 less 不是有效的模板。
任何人都可以帮我通过 lass 作为比较器吗?如果不可能,您能否在不触及课程本身的情况下告诉我任何解决方法。
解决方案
如果您不想使用 operator< ,则可以使用像这样处理同情的包装器类型:
class A {
std::string str;
int id;
public:
virtual bool less(A const& rhs) const{
return id < rhs.id;
}
};
struct A_wrapped{
bool operator()(const A&a, const A&b) {
return a.less(b);
}
}
int main()
{
std::set<A, A_wrapped> s;
}
这样做的好处是您不必向构造函数传递任何内容,类型定义足以告诉它您自己比较的用法。
推荐阅读
- android - 无法使 ScrollView 在弹出窗口中填充整个父级
- r - 使用 R 中的“for”循环将列值子集到单独的向量中
- css - ruby rails动态css类
- javascript - Angular - 重新加载页面时调用了两次构造函数和 ngOninit()
- pandas - str.split(',', expand = True) 太……慢了,如何提升性能?
- nginx - nginx 正则表达式由于 /#
- javascript - “NodeRequire”类型上不存在属性“上下文”。TS2339
- node.js - 上传到服务器(cpanel)时npm启动时无法导入模块,因为它在本地主机中工作正常
- node.js - 浏览器重新加载:不返回所选页面,转到默认主页 - ReactJs
- python - Anaconda 在尝试运行 setup.py 时收到错误消息