3

我想创建一个 C++ 映射,其中键是,例如,int值是 2-D 向量double

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

假设我填充了它,现在我想更新每个键映射的第二个向量(例如将每个元素除以 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>>,因此在将单元格除以数字之前,您需要迭代“两级”索引。

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 回答
0

我有一个解决方案,但有点不同

  • 使用二维向量插入值
  • 将该向量复制到地图中
  • 使用另一个 2d 矢量从地图中复制内容并完成工作
  • 将修改后的向量复制回地图
map<int,vector<vector<double>>> myMap;
vector<vector<double>>v;
v.push_back({7,8});
v.push_back({6,9,8});
myMap[0]=v;
for(auto i=myMap.begin();i!=myMap.end();i++)
{
   vector<vector<double>>v1=i->second;
   for(int j=0;j<v1.size();j++)
   {
      for(int k=0;k<v1[j].size();k++)v1[j][k]/=2;
   }
   i->second=v1;
}

ps 我晚了 8 年

于 2021-04-21T08:03:35.093 回答