2016-09-25 10 views
-3

を反復して、キーのためのベクトルにアクセスしますか? ベクトル、iは、この形式のデータの最初の列には、C言語でマップ内のキーのためのベクトルを格納++とCにマップ内の特定のキーのためのベクトルを作成するにはどうすればよい++およびそれらにアクセスする方法をマップ

100 6 7 
    56 7 8 
    100 90 8 
    100 8 9 
ここ

100や56キーであり、キー100のために私は要素6 7 90 8 8 9 及びキー56を含むベクターを作成する必要が受け入れるべきであると仮定しますbe 7 8 。これをC++でどのように行うことができますか?同時に、C++で特定のキーのベクトルにアクセスする方法は? 私はこのようにベクトルにインセットしようとしましたが、マップを反復してキーのベクトルにアクセスできませんでした。

int k; 
cin>>k; 
for(int i=1;i<=k;i++){ 
    int r,c1,c2; 
    cin>>r>>c1>>c2; 
    mymap[r].push_back(c1); 
    mymap[r].push_back(c2); 

} 

どのようにマップを使用してC++で行うことができますか?

+0

を参照してくださいあなたは* * [ 'のstd :: map']を(http://en.cppreference.com/w/cpp/container/map)反復処理する方法を知っていますか?反復子が['std :: pair'](http://en.cppreference.com/w/cpp/utility/pair)に「ポイント」していることは知っていますか?あなたはあなたが持っている問題を詳しく教えていただけますか?可能であれば、[最小限の、完全で実証可能な例](http://stackoverflow.com/help/mcve)を作成してください。 –

+0

@JoachimPileborg私はそれがベクトルにアクセスすることは難しいと思っています。キーの要素にアクセスする方法としてコードを書くことができますか?キー100のために、私はベクトルを持っていなければなりません6 7 90 8 8 9は印刷されます – yellowpanda

+0

あなたはすでに 'mymap [r]'がベクトルにアクセスできることを知っているようですので、 'push_back'を呼び出すことができます。 'mymap [r] .begin()'と 'mymap [r] .end()'を試してみてはいかがですか? –

答えて

0

マップを使用する場合は、何がやりたいことが鍵に関連付けられたベクトルに追加し続けるです。

次の例では、これを実行する方法を示しています。

#include <map> 
#include <vector> 
#include <string> 
#include <sstream> 

typedef std::map<int, std::vector<int>> MapV; 

using namespace std; 

int main() 
{ 
    MapV mymap; 
    string line; 

    // get one line of data 
    while (getline(cin, line)) 
    { 
     // use a string stream to parse the data 
     istringstream strm(line); 
     int key, data; 

     // first value is the key 
     strm >> key; 

     // all other values are the data 
     while (strm >> data) 
     { 
      // the magic is here. 
      auto pr = mv.insert(make_pair(key, std::vector<int>())); 

      // add item to the vector 
      pr.first->second.push_back(data); 
     } 
    } 
} 

コードの最も重要な部分は、この行です:

auto pr = mv.insert(make_pair(key, std::vector<int>())); 

std::map::insert機能がにイテレータを表す、std::pairを返します。挿入されたアイテムはペアのfirstとして、またはキーが存在する場合は、既存のイテレータを既に存在するキーに置き換えます。

私たちがする必要があるのは、その戻り値を受け取り、second(これはベクトル)にアクセスし、そのベクトルにはただpush_backだけアクセスすることだけです。

このlive example

関連する問題