映射到2维向量

时间:2012-09-26 21:30:21

标签: c++

我想创建一个C ++地图,其中键是int,而值是double的二维矢量:

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

假设我填充它,现在我想更新每个键映射的第二个向量(例如,将每个元素除以2)。我将如何迭代访问该向量? 下面的语句中的“itr-&gt; 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;
    }
}

感谢, 鲁维

2 个答案:

答案 0 :(得分:4)

itr->secondvector<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,因为地图将被修改

答案 1 :(得分:0)

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

  • 使用二维向量插入值
  • 将该向量复制到地图中
  • 使用另一个二维向量从地图复制内容并完成工作
  • 将修改后的向量复制回地图
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;
}

p.s Ik 我迟到了 8 年