我想创建一个 std::map<T1, std::set<T2> >
set
在哪里使用非默认比较器。例如,如果我声明 set
就其本身而言,我会将其声明为:
std::set<int,bool(*)(int,int)> s (fn_pt);
哪里fn_pt
是一个函数指针。在我的示例中,当我向 std::map
添加新 key 时,我希望用那个非默认比较器构造集合。这样的事情可能吗?
更复杂的是,我的编译器不支持C++11,所以我只能接受不需要C++11的解决方案;但是,如果有一种 C++11 方法可以做到这一点,我也有兴趣看到它。
最佳答案
既然你可以使用仿函数那么你应该能够使用:
struct Compare
{
bool operator () (int lhs, int rhs) { return lhs - 10 < rhs; }
};
int main()
{
std::map<int, std::set<int, Compare> > data;
}
在 map 中创建的每个新集都将默认使用模板参数中指定的类型构建。
关于c++ - 使用非默认比较谓词的集合容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31567710/