我想表示一个图形数据结构,我在 C++ STL 中使用成对 vector 的 vector 。示例:
vector<vector<pair<int, int>>> G;
现在我可以了,G[u].push_back(make_pair(v, w));
问题:我需要指定这个数据结构的大小。如果不这样做,当我尝试将元素推送到此数据结构时会出现段错误。如果我确实给出了这样的尺寸:
vector< vector<ii> > adj(10, std::vector<ii>(10));
现在的问题是前 10 对 vector 被初始化为零。如果我现在推回一个元素,它会被推到第 11 个位置。前 10 个为 0。我不想这样做。我想按我需要的顺序插入元素。一个片段让您了解我正在尝试做什么:
for(int i=0;i<E-1;i++)
{
cin >> p >> q >> l;
adj[p].push_back(ii(q, l));
adj[q].push_back(ii(p, l));
}
上面的输出将是 10 个零,然后是推送的值。有什么办法可以解决这个问题?
最佳答案
不知何故,您是在自相矛盾:创建 vector 时,您可以在构造函数中传递元素的数量,也可以从一个空 vector 开始,然后将想要包含的元素放入 vector 中。如果您从 10 号开始,然后再推 10 号,则有 20 号。他们的方法是要么使用
std::vector<T> vect(10);
for (size_t i=0;i<10;i++){
vect[i] = whatever;
}
或
std::vector<T> vect;
for (size_t i=0;i<10;i++){
vect.push_back(whatever);
}
也许您将 vector 的大小与其容量混淆了。您可以通过以下方式设置:
std::vector<T> vect;
vect.reserve(10);
for (size_t i=0;i<10;i++){
vect.push_back(whatever);
}
对于 vector 的 vector ,您必须确保在开始将元素插入之前在该索引处有一个 vector :
std::vector<std::vector<T>> mat;
for (size_t i=0;i<10;i++){
mat.push_back(std::vector<T>());
for (size_t j=0;j<10;j++){
mat[i].push_back(whatever);
}
}
关于c++ - 声明具有特定大小并插入元素的 vector<vector<pair<int, int>>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37171266/