我有一个结构
struct Key {
double x;
double y;
double z;
bool operator==(const Key& k) const{
return (x == k.x && y == k.y && z == k.z);
}
}
Run Code Online (Sandbox Code Playgroud)
我这样做是因为我想把它作为哈希映射的关键.
然后我做
std::unordered_map<Key, int> map = {{1.01, 2.02, 3.03}, 333};
Run Code Online (Sandbox Code Playgroud)
我想使用初始化列表作为构造函数,但我得到错误 no matching constructor for initialization of 'std::unordered_map<key, int> map = {{1.01, 2.02, 3.03}, 333};'
尝试{{{1.01, 2.02, 3.03}, 333}}而不是{{1.01, 2.02, 3.03}, 333}
可以使用元素列表初始化容器,而不是如何构造一个元素的说明.
这里有很多问题.
首先,您尚未为您的Key类型定义哈希函数.要Key用作a中的键unordered_map,你需要一个相等的运算符(你已经做过)和一个std::hash你尚未完成的特化.所以你需要做这样的事情:
namespace std {
template <> struct hash<Key> {
unsigned operator()(const Key& arg) const {
return /* some hash code */
}
};
}
Run Code Online (Sandbox Code Playgroud)
其次,初始化列表中的括号级别太少.期望的初始化列表是键/值对的列表,因此如果要使用单个键值对作为初始地图内容,则需要额外的大括号:
std::unordered_map<Key, int> map = {{{1.01, 2.02, 3.03}, 333}};
Run Code Online (Sandbox Code Playgroud)
这编译了这些变化; 看这个演示确认.
| 归档时间: |
|
| 查看次数: |
1014 次 |
| 最近记录: |