gpt4 book ai didi

c++ - 在 std::unordered_map 中使用模板化键

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:43:18 25 4
gpt4 key购买 nike

我不明白为什么我的编译器不接受下面的代码

#include <unordered_set>
#include <unordered_map>

template<class T>
using M = std::unordered_set<T>;

template<class T>
using D = M<T>;

template<class T>
using DM = std::unordered_map < typename M<T>::const_iterator // Problem
, typename D<T>::const_iterator >; // Problem

int main(int argc, char ** argv)
{
D<int> d;
M<int> m;
DM<int> dm; // Problem
}

编译命令是

clang++ -std=c++14 test.cpp -o test

编译器错误消息摘录是

/usr/bin/../lib/gcc/x86_64-linux-gnu/5.3.1/../../../../include/c++/5.3.1/bits/hashtable_policy.h:85:11: error: 
implicit instantiation of undefined template
'std::hash<std::__detail::_Node_const_iterator<int, true, false> >'
noexcept(declval<const _Hash&>()(declval<const _Key&>()))>

为什么不允许使用typename M<T>::const_iterator作为 std::unordered_map 中的关键?

最佳答案

因为 std::unordered_map 的散列的默认模板参数是std::hash ,它不提供迭代器的实现。

你需要为它提供use-defined hash,比如

struct iterator_hash {
template <typename I>
std::size_t operator()(const I &i) const {
return std::hash<int>()(*i); // or return sth based on i
}
};

关于c++ - 在 std::unordered_map 中使用模板化键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36966883/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com