【问题标题】:Unordered map containing a graph node as the key包含图节点作为键的无序映射
【发布时间】: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) 为地图构建哈希值。
  • 另外,我建议避免使用裸指针,而是使用智能指针。

标签: c++ hashmap


【解决方案1】:

甚至不用理会% edges.size()。 unordered_map 本身已经执行了% this -&gt; _Table.size()

请注意,对于稀疏连接的图(例如 std::vector<std::pair<Node*,int>> 可能更有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-28
    • 1970-01-01
    • 2020-07-16
    • 1970-01-01
    • 2014-10-06
    • 2016-06-20
    • 2018-03-31
    相关资源
    最近更新 更多