2016-09-13 11 views
-2

はここで、(例えば1私のコード抽出ベクトルのstd ::マップから<int型、のstd ::ベクトル>

位置x(抽出/取得)ベクトルを取るbese方法です何
#include <iostream> 
#include <map> 
#include <string> 
#include <vector> 

typedef std::vector<int> VectorInt; 
typedef std::map<int, VectorInt> MapVectorInt; 

int main() { 
     MapVectorInt myMap; 

     VectorInt v1; 
     v1.push_back(1); 
     v1.push_back(3); 
     v1.push_back(5); 

     VectorInt v2; 
     v2.push_back(2); 
     v2.push_back(4); 
     v2.push_back(6); 

     myMap.insert(std::make_pair(0, v1)); 
     myMap.insert(std::make_pair(1, v2)); 



     return 0; 
} 

です2 ...);

+4

何か試しましたか?あなたのvalue要素がベクトルであるという事実は、マップへのアクセスのセマンティクスを変更しません。 – EdChum

+0

マップの使い方のガイドを見てください。 – Hayt

+0

他のタイプをマップから抽出するのと同じです。 'std :: vector'に特別なことはありません。 – juanchopanza

答えて

1

myMap[0]またはmyMap[1]と地図内のベクターを参照できます。

これらのいずれかのエイリアスを作成することができます。 auto& x = myMap[0];。エイリアスを使用すると、マップに格納されているベクトルにアクセスします。

(コピーを変更することなく、マップの内容を変更することができるように)、ベクターのコピーを取るために、それは他のオブジェクトをコピーとしてだけで同じです:01が参照していること

auto x = myMap[0]; 

は注意insertコールで使用したキーに移動します。検索オーダーや挿入オーダーではありません(あなたの例では、すべて同じものになります)。

+0

そして、それを行う前に地図のサイズを確認してください。 –

+0

@Dkgサイズチェックは必要ないし有用でもありません。マップはキーによって索引付けされます。私は彼が「ポジション」を言ったときにOPは「キー」を意味すると考えています。 –

+0

更新の質問をご覧ください。それは動作しませんでした – cateof

2

あなたは使用することができます。

auto v1=myMap[0]; //This will do a deep copy for the vector 

か:

auto& v1=myMap[0]; //This will hold a reference to the vector 

を項目が削除している場合、参照が無効になりますので、第二のアプローチでは注意してください。

あなたは安全なオプションを使用std::map::atたい場合:

auto v1=myMap.at(0); 

か:

auto& v1=myMap.at(0) 

を項目がない場合、これは(std::out_of_range)例外がスローされます。

+0

@ M.Mああ、私はstd :: vectorに慣れているようだ。ありがとうございます –

+0

私の更新の質問をご覧くださいできますか?それは動作しませんでした – cateof

2

短い答え:コンテキストとそれhttp://en.cppreference.com/w/cpp/container/map/find


を探すために ベスト場所:

のみ可視化のために、私はあなたが(要素を取得し、あなたの質問に言ったようにあなたがあなたの意図を表現する必要がありますねマップから「最終的に」挿入しないで、既存の要素にアクセスするための[]を使用してそれを作成します):

Try It Live

関連する問題