图的C ++邻接表表示

问题描述

在C ++中实现图的邻接表表示的有效方法是什么?

  1. 向量* edges;
  2. 列出* edges;
  3. map * edges;
  4. map >边;

我认为应该是选项3或4,但是在使用该选项时我找不到任何弊端... 有吗?

有人可以帮助我吗?这将是实现邻接表和竞争性编程的最有效方法

解决方法

在C ++中实现图的邻接表表示的有效方法是什么

许多典型的图问题适用于给定的静态图,将需要对其进行一次表示,此后,在解决相关问题的同时,可以重复使用给定的表示。在这种情况下,std::unordered_map<int,std::vector<int>>是合适的结构;其中,无序映射中给定 key value 表示给定顶点的(单向/双向)连接顶点。应该没有理由在已摊销的固定时间查找容器std::map上使用有序的std::unordered_map

关联容器std::unordered_mapstd::unordered_set可以快速查找(您在这里需要),但是如果它们需要频繁地突变(例如,对于动态图问题),可能会对性能产生影响。与往常一样,如果要实现高效率的计算程序,则分析和测量运行时和内存以找到实际问题的瓶颈是关键。