如何确定C++模板参数是否存储唯一键?

Gif*_*guy 0 c++ algorithm templates

我正在使用容器进行一些自定义算法优化.
我的算法需要支持所有标准容器以及自定义容器.

现在,我正在努力使这个算法与set容器一起工作.
(设置容器需要特殊处理,因为个别元素总是如此const.)

问题是,我需要根据set容器是否存储唯一键来分离代码路径.
(唯一键显然需要更改算法.)

C++标准库是否提供可以执行此操作的任何条件模板?
(相似std::is_signed_v)

或者还有另一种方法可以做出这个决定吗?

template < typename _SET_T >
void foo ( )
{
    if ( unique keys )  // e.g. if _SET_T is a std::set or std::unordered_set
    {
        // optimize algorithm to account for uniqueness of keys
    }
    else  // e.g. if _SET_T is a std::multiset or std::unordered_multiset
    {
        // optimize algorithm to account for NON-uniqueness of keys
    }
}
Run Code Online (Sandbox Code Playgroud)

Que*_*tin 6

标准库中没有这样的概念和/或特征,你必须自己编写:

template <class T>
struct has_unique_keys : std::false_type {};

template <class... P>
struct has_unique_keys<std::set<P...>> : std::true_type {};

template <class... P>
struct has_unique_keys<std::map<P...>> : std::true_type {};

// ...
Run Code Online (Sandbox Code Playgroud)

基本情况假设密钥不是唯一的,因为我认为独特密钥期望算法在多密钥容器上会失败,而另一种方式只会更慢.