[英]User defined comparator for member of C++ class
我有一个关于以下代码的快速问题:
#include <iostream>
#include <string>
#include <map>
using namespace std;
struct mySet{
mySet(){
}
auto compare = [](int a, int b){ return a > b; };
map<int, int, bool(*)(int, int)> myMap(compare);
void insert(int x){
if(myMap.find(x) == myMap.end()) myMap[x] = 1;
else myMap[x]++;
}
void output(){
for(auto p : myMap) cout << p.first << " " << p.second << endl;
}
};
int main()
{
mySet thing;
thing.insert(1);
thing.insert(2);
thing.insert(1);
thing.output();
}
这段代码引发了一个错误,我怀疑它围绕
auto compare = [](int a, int b){ return a > b; };
map<int, int, bool(*)(int, int)> myMap(compare);
我的理解是这不会编译,因为 compare 是 class 的成员,它需要一个实例才能被调用。
如果我将此代码替换为
static auto compare = [](int a, int b){ return a > b; };
它仍然无法编译,因为它至少需要一个 mySet 实例才能调用 compare 。
我的问题是:
我的理解是否正确,或者 std::map 中的函数类型和比较器类型是否存在更险恶的情况?
是否有一个简单的解决方案来使用用户定义的比较器声明 class 的成员? 我最简单的想法就是将成员声明为
std::map<int, int, bool(*)(int, int)> myMap;
然后将 function 传递给构造函数,例如
mySet( bool(*f)(int, int) ){
map<int, int, bool(*)(int, int)> newMap (f);
myMap = newMap;
}
只是好奇是否有更简单的解决方案,并试图更好地理解正在发生的事情。
感谢和感谢任何帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.