2017-02-10 6 views
1

std::map<string,int>std::vector<int>をどのように反復するのですか?for loop?std :: mapを反復する方法<string,int>とstd :: vector <int> for for single loop?

私はthis questionsを見ましたが、私の問題を解決できませんでした。

私はこの

map<string,int> data; 
data["Shravan"] = 1; 
data["Mama"] = 2; 
data["Sa1"] = 3; 
data["Jhandu"] = 4; 

vector<int> values = {1,2,3,4}; 

for(const auto& it1: data,it2 : values) { 
    // Do something 
} 

編集ようにしようとしています:私は、一つ一つを通過することはできません。私はstd::mapのキーとstd::vectorの値を同じ関数で使用しているためです。ループ内ではforと呼ばれます。

同じサイズの両方の容器。

+0

なぜですか?あなたはどんなふるまいをしていますか? 1つのコンテナを通過し、次に他のコンテナを通過するまたは、それらをインターリーブすることはできますか? – BoBTFish

+0

はhttp://www.cplusplus.com/reference/map/map/begin/およびhttp://www.cplusplus.com/reference/map/map/end/をご覧くださいが、これは良い習慣ではないということです...同様の機能がベクトルにも適用されます – Kupto

+0

@BoBTFish:私は一つずつ進むことはできません。私は 'std :: map'のキーと' std :: vector'の値を同じ関数内で使用しているからです。 – Shravan40

答えて

3

あなたは同じ長さの両方があります知っている場合は、のようなものを使用します。

auto vit = begin(value); 
auto mit = begin(data); 
for (; vit != end(value); ++mit, ++vit) { 
    // Use mit and vit 
} 
+0

コードがコンパイルされません。 'mit'は_const_への参照であり、' ++ '演算子はconstではありません。 –

+0

修正された回答 –

1

は、DO-ながら、約どのようにこの回答で説明boost::zip_iteratorhttps://stackoverflow.com/a/8513803/2210478

+0

@MikeMBはい、そうです。私が提案したコードは間違っています。私はそれを削除しました。多分OPがzip_iteratorをまだチェックできます。 –

+1

[OK]を、下の票を削除しました。使用例を追加すると、アップヴォートが得られます。 – MikeMB

2

を考えてみましょうか?あなたの容器が空でないならば。

auto iv = std::begin(value); 
auto id = std::begin(data); 

do { 
    // Use those iterators 
} while(++iv != std::end(value) && ++id != std::end(data)) 

それとも、あまりにも空のコンテナを処理したい場合はwhileを使用しています。

auto iv = std::begin(value); 
auto id = std::begin(data); 

while(iv != std::end(value) && id != std::end(data)) { 
    // Use those iterators 

    iv++; id++; 
} 
+3

単純な 'while'は空のコンテナを処理します。 – Jarod42

+0

@ Jarod42はい、私のコードは空のコードで失敗します。それを前提条件として追加しました:) –

1

あなたはmapvectorの両方を反復処理し、対応するコンテナの端部に対してイテレータを確認してくださいすることができます。

auto map_iter = data.begin(); 
auto vec_iter = value.begin(); 
for (; map_iter != data.end() && vec_iter != value.end(); 
     ++map_iter, ++vec_iter) { 
    // Use map_iter and vec_iter 
} 
関連する問題