vector<pair<int,int>> 是二维数组还是一维数组
时间: 2024-01-01 22:03:43 浏览: 83
vector<pair<int,int>> 是一维数组,它是一个 vector 容器,其中每个元素都是一个 pair<int,int> 类型的对象。每个 pair 对象表示一个二元组,相当于一个长度为 2 的一维数组。因此,vector<pair<int,int>> 可以看作一个长度可变的一维数组,其中每个元素都是长度为 2 的一维数组。
相关问题
二维vector<vector<pair<int,int>>>
二维 vector<vector<pair<int,int>>> 表示了一个二维数组,其中每个元素是一个 vector,而每个 vector 中的元素是一个 pair,pair 中存储了两个 int 类型的值。
这种数据结构通常用于表示稀疏矩阵,其中第一维表示行,第二维表示列,每个元素是一个非零的值和它的列坐标。例如,下面是一个 3x4 的稀疏矩阵:
```
0 0 0 0
0 0 2 0
0 3 0 0
```
可以用以下代码来表示:
```cpp
vector<vector<pair<int,int>>> mat(3);
mat[1].push_back({2, 2});
mat[2].push_back({3, 1});
```
其中 mat[1][0] 表示第 2 行第 3 列的值为 2,mat[2][0] 表示第 3 行第 2 列的值为 3。其它位置都是 0,可以省略不存储。
vector<vector<pair<int, int>>>& adj这个邻接表怎么通过输入初始化
`adj`是一个二维动态向量,用于存储邻接表,其中内部的一维向量包含成对的整数`(int, int)`,分别代表顶点之间的关联(比如连接顶点和它们的权重)。初始化这种邻接表通常需要先确定图的顶点数以及每条边的具体信息,这里假设我们有一个顶点集合`vertices`和边的信息存储在`edges`中(例如,每条边的形式可能是`(from, to, weight)`),我们可以这样进行初始化:
```cpp
vector<vector<pair<int, int>>> adj(MAX_VERTICES); // MAX_VERTICES是最大顶点数
for (const auto& edge : edges) { // 这里的edges是一个包含边的容器
int from = edge.first; // 边的起点
int to = edge.second; // 边的目的地
int weight = edge.third; // 边的权重
// 检查边是否有效,避免插入无效值
if (from < 0 || from >= MAX_VERTICES || to < 0 || to >= MAX_VERTICES)
continue;
// 在邻接表中添加边
adj[from].push_back({to, weight});
// 对于无向图,还需要添加反向边(如果有需求)
if (isUndirectedGraph && from != to)
adj[to].push_back({from, weight});
}
```
这里假设`edges`是一个容器(如`std::vector`),并且`isUndirectedGraph`是布尔值,指示图是否是无向的。这段代码会为给定的图中的每条边创建对应的邻接表条目。
阅读全文