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)
标准库中没有这样的概念和/或特征,你必须自己编写:
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)
基本情况假设密钥不是唯一的,因为我认为独特密钥期望算法在多密钥容器上会失败,而另一种方式只会更慢.