3

intたとえば、キーが で、値が の 2 次元ベクトルである C++ マップを作成したいと考えていますdouble

std::map<int, std::vector<vector<double>>> myMap;

それを埋めて、各キーによってマップされた 2 番目のベクトルを更新したいとします (たとえば、各要素を 2 で割ります)。そのベクトルに繰り返しアクセスするにはどうすればよいですか? 以下のステートメントの「itr->second[0]」構文は明らかに間違っています。そのアクションの正しい構文は何でしょうか?

for(std::map<in, vector<vector<double> > > itr = myMap.begin(); itr != myMap.end();++itr)
{
    for(int i = 0;i < itr->second[0].size();++i)
    {
         itr->second[0][i] /= 2;
    }
}

ありがとう、ルビ

4

2 に答える 2

4

itr->secondは のタイプでvector<vector<double>>あるため、セルを数値で除算する前に反復処理する「2 レベル」のインデックスがあります。

for ....
{
    vector<vector<double>>& vv = itr->second;
    for(int i=0; i<vv.size(); ++i)
        for(int j=0; j<vv[i].size(); ++j)
            vv[i][j] /= 2
}

あなたの質問を正しく理解しましたか?

編集: 投稿を編集した後、コードはほぼ正しいです。タイプミスがあり、イテレータの型が無効です。参照してください (以下のコードは少なくとも mingw でコンパイルされます)

std::map<int,std::vector<std::vector<double> > > myMap;

for(std::map<int, std::vector<std::vector<double> > >::iterator itr = myMap.begin();
    itr != myMap.end();
    ++itr)
{
    for(int i = 0;i < itr->second[0].size();++i)
    {
         itr->second[0][i] /= 2;
    }
}

追記しましたのでご了承ください::iterator::const_iterator地図が変更されるので、そうであってはなりません

于 2012-09-26T21:34:01.997 に答える