【发布时间】:2020-08-24 16:35:10
【问题描述】:
我有以下结构:
array<int, 2> map_size;
struct Node{
int id;
array<int, 2> pos;
vector<Node*> nbs;
bool in_open;
bool in_closed;
};
每个节点都有一个在 map_size(全局变量)范围内的位置 (pos)。
我正在使用以下无序地图
struct PosHash{
public:
size_t operator()(array<int, 2> const& pos) const{
return pos[1] + pos[0]*map_size[1];
}
};
struct PosCompare{
bool operator()(const array<int, 2>& pos1, const array<int, 2>& pos2) const{
if (pos1[0] == pos2[0] and pos1[1] == pos2[1]){
return true;
}
else{
return false;
}
}
};
unordered_map<array<int, 2>, Node*, PosHash, PosCompare> nodes;
map_size 是散列函数中使用的全局变量,可以让我得到一个完美的散列。 但是,我想将 map_size 作为参数传递给 PosHash,这样可以避免使用全局变量。我该怎么做?
PD:map_size 值在执行时间确定
【问题讨论】:
-
为
PosHash拥有一个map_size数据成员怎么样。让它的构造函数初始化它。然后将此对象传递给unordered_map的构造函数(在适当的位置) -
map_size是您的地图的关键。 -
pos[]是Node中的变量,而这又是unordered_map中的映射值。散列函数PosHash应该接收键值并产生Nodes,即pos[]。为什么哈希函数需要映射值来产生映射值? -
@User10482 我认为就是这样。但是不知道怎么在unordered_map这一行传参数(map_size是在执行时决定的)
-
@Lingo 这是针对 A* 的。在 A* 中,我将开始和目标位置作为数组
,而不是节点。
标签: c++ unordered-map unordered-set hash-function