我想创建一个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;
}
}
感谢, 鲁维
答案 0 :(得分: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
,因为地图将被修改
答案 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 年