c++ - 使用非默认比较谓词的集合容器

标签 c++ stl set comparator

我想创建一个 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/

相关文章:

c++ - Boost:在 vector 中存储指向分布的指针

c++ - 线段树标准模板库

c++ - 'vectorize' 这个重复的 C++ 代码的方法?

java - 为实现相同接口(interface)的两个子类定义泛型方法

c++ - C++ 中的 std::set 删除器不起作用

c++ - 我想在 omnet++ 中模拟客户端/服务器场景?

c++ - 为什么 make_tuple 的实现不通过大括号初始化返回?

c++ - 最常用的 STL 算法、谓词、迭代器

c++ - 用于事件调度程序的 STL 容器

java - java中的方法如何返回Set?