gpt4 book ai didi

c++ - 在 C++ 中使用 STL 创建邻接表的有效方法是什么?

转载 作者:搜寻专家 更新时间:2023-10-31 01:12:03 25 4
gpt4 key购买 nike

我目前使用如下 vector 的 vector :

typedef pair<int, int> vertex;
vector < vector<vertex> > adj_list(n); // n is number of vertices

// Input graph
for (int i = 0; i < edges; i++ )
{
cin >> source >> target >> weight;
vertex v(target, weight);
adj_list[source].push_back(v);
}

是列表的 vector 即。

vector < list<vertex> > adj_list(n);

更好的选择?如果是,为什么?我主要关心的是有效地创建邻接表,并能够快速读取连接到特定顶点的所有顶点,以实现 Dijkstra 算法。

最佳答案

为此我会使用 std::deque<>,因为您很可能不需要从中间移除元素(这就是为什么有人会想要使用 std::list<>)。它应该比 std::vector<> 或 std::list<> 更有效。拥有连续的内存( vector )和可移动的项目(列表)是有代价的—— vector 的大小调整和列表的指针取消引用/分散内存是昂贵的。

另请参阅:http://www.gotw.ca/gotw/054.htm

请注意,如果您的目标是算法竞赛,您可能会对这种基于 STL 的数据结构占用的内存量感到惊讶。

关于c++ - 在 C++ 中使用 STL 创建邻接表的有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14105565/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com