c++ - 函数定义未在模板中声明参数错误

标签 c++ template-specialization

这个问题以前曾被问过,但不是在同一上下文中提出的。

代码:

    namespace std
    {
    template <typename T, typename U>
    struct hash < pair <T,U> >
    {
        size_t operator()
        {
            return hash<T>()(first) ^ hash<U>()(second);
        }
    };
    }

我尝试使用 unordered_map 因为元素不需要排序。但这需要一个哈希比较函数。以下代码会生成编译时错误:

“错误:函数定义未声明参数”

问题是我的 map 不仅仅包含内置类型,而是混合类型:

typedef std::vector<Point> Point_Set;
typedef std::unordered_map < Point_Set, double > Tree;

对此有什么想法吗?

最佳答案

该运算符需要将一对作为参数,并使用其中的 firstsecond 成员:

size_t operator()(pair<T,U> const & pair)
{
    return hash<T>()(pair.first) ^ hash<U>()(pair.second);
}

关于c++ - 函数定义未在模板中声明参数错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10086107/

相关文章:

c++ - 如何从另一个命名空间中显式特化函数模板?

scala - 这是scala专门的错误吗?

c++ - std::set 与用户定义的类型,如何确保没有重复

c++ - 如何正确判断文本文件的字符编码?

c++ - 有哪些好的 3D 插值库?

c++ - 模板特化 'on the fly'

c++ - 在继续派生函数之前执行基函数

c++ - 如何将数组从行顺序重写为列顺序?

c++ - 非类型模板类成员特化

c++ - 检查模板函数是否存在