Я смотрел на реализацию алгоритма Прима на geeksforgeeks.org и пытался реализовать эту функцию в режиме практики. Я посмотрел, как был получен вход, и увидел это:
#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;
}
У меня много проблем с пониманием того, как они используют vector
. Я никогда не видел передачу вектора подобным массиву: vector <pair<int,int> > g[]
.
Я посмотрел на реализацию STD vector
и не смог ничего найти о прохождении вектора таким образом или о создании вектора с vector <pair<int,int> > adj[MAX];
.
Наконец, я очень озадачен тем, что делает следующий код:
adj[x].push_back({w, y});
adj[y].push_back({w, x});
Я пытался реализовать это сам:
#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;
}
Но я получаю ошибку class 'std::vector< pair<string, int> >' has no member named ‘first’
.
Если бы я мог помочь с пониманием того, как здесь используется * 1021, я был бы очень признателен Я уже просмотрел несколько сообщений StackOverflow, включая vector :: push_back vs vector :: operator [] .
Ссылка на исходную задачу: здесь