向量push_back与对的用法

Eri*_*ner 0 c++ vector

我在geeksforgeeks.org上查看了Prim's Algorithim的实现,并尝试在练习模式下实现该功能。我看了如何收到输入,然后看到了:

#include<bits/stdc++.h>
using namespace std;

const int MAX = 1e4 + 5;

int spanningTree(vector <pair<int,int> > g[], int n);

int main()
{
    int t ;
    cin>>t;
    while(t--)
    {
        vector <pair<int,int> > adj[MAX];
        int n,e;
        int w, mC;
        cin >> n>> e;
        for(int i = 0;i < e;++i)
        {
            int x,y;
            cin >> x >> y >> w;
            adj[x].push_back({w, y});
            adj[y].push_back({w, x});
        }

        mC= spanningTree(adj, MAX);
        cout << mC << endl;
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我在了解他们的使用方式时遇到了很多麻烦vector。我从来没有见过一个载体以类似的方式传球到一个数组:vector <pair<int,int> > g[]

我查看了STD的STD实现,vector但找不到有关以这种方式传递向量或使用构造向量的任何信息vector <pair<int,int> > adj[MAX];

最后,对于以下代码的作用,我感到非常困惑:

adj[x].push_back({w, y});
adj[y].push_back({w, x});
Run Code Online (Sandbox Code Playgroud)

我尝试自己实施:

#include <iostream>
#include <vector>
#include <utility>
#include <string>

using namespace std;

int main()
{
    vector< pair<string, int> > vec[2];
    vec[0].push_back({"One", 1});

    vec[1].push_back({"Two", 2});

    for(int x = 0; x < 2; ++x){
        cout << vec[x].first << ", " << vec[x].second << endl;
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是我得到一个错误class 'std::vector< pair<string, int> >' has no member named ‘first’

如果我能帮助您了解vector此处的用法,我将不胜感激。我已经看过多个StackOverflow帖子,包括vector :: push_back与vector :: operator []

原始问题的链接在这里

Lig*_*ica 6

我从未见过以类似于数组的方式传递向量: vector <pair<int,int> > g[]

一个数组!向量数组。

代码的问题在于,您有两个向量,每个向量都有一个元素,并且循环仅提取向量,而不是它们的单个元素。

您的版本为:

#include <iostream>
#include <vector>
#include <utility>
#include <string>

using namespace std;

int main()
{
    vector< pair<string, int> > vec[2];
    vec[0].push_back({"One", 1});

    vec[1].push_back({"Two", 2});

    for(int x = 0; x < 2; ++x){
        cout << vec[x][0].first << ", " << vec[x][0].second << endl;
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我添加的全部是[0](每个向量的索引)。

当然,这样的例子的实用性值得怀疑。在这种情况下,您似乎想要一个带有两个元素的向量,并且看不到任何数组。

老实说,我也不喜欢原始代码。混合数组和向量是造成混淆的秘诀(hyello);他们本可以使用“ 2D向量”,或者更好的是使用在其顶部放置2D索引的1D向量。这样也将具有更好的缓存位置。