【发布时间】:2015-11-16 04:48:15
【问题描述】:
我正在努力实现 dijsktra 的遍历图的算法,但遇到了一个小障碍。
class Node{
private:
int id = -1;
unordered_map<Node*, int> edges;
};
如您所见,图中的每个节点都包含一个用于 id 的 int 以及一个包含 node* 作为键值和边长作为基础数据的无序映射。我遇到的问题是我不知道散列这些 id 的最佳方法是什么。
ID 将从文件中读取并按顺序编号。散列这些 id 而不会发生很多冲突的最佳方法是什么?
编辑:我目前只是以返回 id mod edges.size() 的方式进行散列,但我不认为这是最好的方式。
【问题讨论】:
-
看一下
std::pair使用的哈希,它结合了它持有的两个项目的哈希,或者std::tuple。对于edges,您可以遍历它并仅根据每个条目中的键 (Node) 为地图构建哈希值。 -
另外,我建议避免使用裸指针,而是使用智能指针。