c++ - 如何比较两个 Compare of two std::set

标签 c++ stl set

当我使用容器std::set时,我想比较set的Compare。set的一个定义如下:

template < class T,                        // set::key_type/value_type
           class Compare = less<T>,        // set::key_compare/value_compare
           class Alloc = allocator<T>      // set::allocator_type
           > class set;

我们知道 Compare 是集合中元素的排序命令,它可以是 STL 中的函数对象或用户提供的。函数对象的唯一请求是实现 opeartor()。在程序中我可以使用 public 获取 Compare成员函数 value_compare value_comp() const 我的问题是如何区分两组的排序标准(两组是否使用相同的排序标准)?

最佳答案

std::set有一个 key_compare typedef 到 Compare 如此简单:

std::is_same<decltype(set_a)::key_compare, decltype(set_b)::key_compare>::value

或者在结构中:

template<typename Set1, typename Set2>
struct is_same_comparator: public std::is_same<typename Set1::key_compare,
                                               typename Set2::key_compare> { };

using S1 = std::set<int>;
using S2 = std::set<int, std::greater<int>>;

static_assert(is_same_comparator<S1, S1>{}, "Oops!");
static_assert(is_same_comparator<S1, S2>{}, "Oops!");

DEMO

关于c++ - 如何比较两个 Compare of two std::set,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37413703/

相关文章:

c++ - 使用 Boost Asio 同步 HTTPS POST

C++ 警告 : division of double by zero

c++ - QTcpSocket - 检查是否已连接

python - 有没有更好的方法来迭代集合(A,B,C)选择(a,b,c)

java通用集合函数

algorithm - 查找一组值的所有唯一子集

c++ - 指针数组的动态初始化

c++ - RAII 和 C++ STL

c++ - 用于在 OpenGL 缓冲区对象中存储 STL vector 的自定义分配器

c++ - 为什么我可以在通过 'auto' 的基于范围的 for 循环中使用 'std::pair' 而不是 'std::unordered_map' 对非常量的引用?