c++ - 声明具有特定大小并插入元素的 vector<vector<pair<int, int>>?

标签 c++ vector data-structures stl graph-theory

我想表示一个图形数据结构,我在 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/

相关文章:

.net - 对于只读、无序的唯一字符串集合,性能最快的选项是什么?

c++ - 如何 memcpy() 一个常量

c++ - 声明友元函数时出现变量作用域错误

c++ - 如何复制或连接两个字符 *

c++程序出现段错误

arrays - 自定义 searchsortedfirst 方法

r - 在向量上循环 uniroot

c++ - 用于在图中查找约束最短路径的高效数据结构

algorithm - 最长公共(public)前缀数组

c++ - std::vector::reserve( unknown m ),我知道 m<<N (通常)并且知道 N