映射到二维向量

Map to a 2 dimensional vector

本文关键字:二维 向量 映射      更新时间:2023-10-16

我想创建一个C++映射,其中键是,比如说,int,值是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;
    }
}

谢谢Rubi

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

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

  • 使用 2D 矢量插入值
  • 将该矢量复制到地图中
  • 使用另一个 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;
}

p.s Ik 我迟到了 8 岁