2017-06-16 26 views
-8

Iペアペアのベクトル配列の要素を印刷する方法は?

vector <pair<int,int> > a[4] 

.Iのベクターの配列を有するがpush_back.Butを使用して、それに要素を追加した私は私がiteretorを使用elements.ifを印刷し、[i]のようにそれを印刷する方法を知りません。最初または[i]。秒それは私にエラーを投げます。それを行う他の方法はありません。事前に感謝します。

vector <pair<int,int> > a[4]; 
for(int i = 0;i < e;++i) 
{ 
    int x,y; 
    cin >> x >> y >> w; 
    a[x].push_back({w, y}); 
    a[y].push_back({w, x}); 
} 

これは要素をプッシュする方法です。ただし、どのように印刷するのですか。

for(i=a[i].begin();i!=a[i].end();i++) 
{ 
    cout<<a[i].second<<" "; 
} 

私は以下のエラーが発生しています。それらを印刷する方法はわかりません。

error: no match for 'operator[]' (operand types are 'std::vector<std::pair<int, int> >*' and 'std::vector<std::pair<int, int> >::iterator {aka __gnu_cxx::__normal_iterator<std::pair<int, int>*, std::vector<std::pair<int, int> > >}') 
    for(i=g[i].begin();i!=g[i].end();i++) 
+0

ようこそスタックオーバーフロー。 [The Tour](http://stackoverflow.com/tour)を読み、[ヘルプセンター](http://stackoverflow.com/help/asking)の資料を参考にしてください。ここに聞いてください。 –

+0

これはなぜ私がここで尋ねるべきではないトピックですか? – piku

+0

'vector >'の配列を持たせてもよろしいですか? –

答えて

2

あなたはしなかった私たちはあなたのマシンで間違って何が起こっているのか知ることができることができるように、任意のコードを提供します。 しかし、ここではペアのベクトルにアクセスする方法の実施例である:

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

typedef std::pair<int, std::string> pairIntString; 
int main() 
{ 
    std::vector<pairIntString> pairVec; 

    pairVec.push_back(std::make_pair(1, "One")); 
    pairVec.push_back(std::make_pair(2, "Two")); 
    pairVec.push_back(std::make_pair(3, "Three")); 

    for (std::vector<pairIntString>::const_iterator iter = pairVec.begin(); 
     iter != pairVec.end(); 
     ++iter) 
    { 
     std::cout << "First: " << iter->first 
       << ", Second: " << iter->second <<std::endl; 
    } 
    return 0; 
} 

出力、see here

First: 1, Second: One 
First: 2, Second: Two 
First: 3, Second: Three 

編集#1:今、あなたは、コードを提供

が、実際にはペアのベクトル配列vector <pair<int,int> > a[4];を使用しています。さらに、begin()メソッドのiterator[] operatorに入れます。あなたは多くのものを混ぜたようです。ここではi=a[i].begin()(1つはiはイテレータであり、もう1つはインデックスです)、実際に何があるのか​​分かりません。私の例を見て、配列とベクトルと、それらに正しくアクセスする方法を読んでください。インデックス化されたイテレータベースのアクセスの違いについても読んでください。

編集#2:

このループ:

for(i=a[i].begin();i!=a[i].end();i++) 
{ 
    cout<<a[i].second<<" "; 
} 

は、おそらく次のようになります。

/* loop through the fixed size array */ 
for(size_t idx = 0; idx < 4; ++i) 
{ 
    cout << "Array element idx: " << idx << endl; 
    /* get the iterator of the specific array element */ 
    for (vector <pair<int,int> >::const_iterator iter = a[idx].begin(); 
     iter != a[idx].end(); 
     ++iter) 
    { 
     cout << "First: " << iter->first 
      << ", Second: " << iter->second << endl; 
    } 
} 

あなたはペアのベクトルの配列を抱えているとして、あなたが2つのループを持っています配列とベクトルの上に置く。配列は固定サイズの4なので、私はそれを最大値として使用しました。

+0

私は自分の投稿に変更を加えました。その場合の印刷方法 – piku

+0

いいえ、it.iは隣接関係リストの表現に使用する必要があります。要素の印刷方法を教えてください – piku

+0

ya私はstlをC++で使い慣れていますなぜこれらの混乱があるのでしょうか。 – piku

0
vector <pair<int,int>> vec[5]; 
vector <pair<int,int>> :: iterator it; 

for(int i=0;i<5;i++){ 
    for(it=vec[i].begin(); it!=vec[i].end();it++) cout << it->first << " " << it->second << " -> "; 
    cout << "\n"; 
}