【发布时间】:2020-12-04 15:20:39
【问题描述】:
我有一个结构作为 std::unordered_map 的键。我已经编写了自定义哈希函数和比较谓词。当我尝试编译代码时,出现以下错误-
错误:静态断言失败:键相等谓词必须可以用键类型的两个参数调用 1831 | static_assert(__is_invocable
{},
下面是代码sn-p-
using namespace std;
struct keys
{
int port_num;
};
struct fields
{
int priority;
};
struct container_hash {
std::size_t operator()(struct keys const& c) const {
return hash<int>{}(c.port_num);
}
};
struct container_equal {
bool operator()(struct keys const& k1, struct keys const& k2)
{
return k1.port_num == k2.port_num;
}
};
int main()
{
unordered_map<struct keys, struct fields, container_hash, container_equal> hashmap;
struct keys k;
k.port_num = 8;
struct fields f;
f.priority = 2;
hashmap[k] = f;
}
【问题讨论】:
-
无关:在 C++ 中,在使用
struct之前不需要struct。例如struct keys k;应该只是keys k;
标签: c++ hashmap unordered-map