在 typedef map中添加向量
我有一个数据结构如下,
typedef vector<double> v_t;
typedef set<int> s_t;
typedef map<s_t, v_t> m_t;
假设地图 m1
具有以下值:
< <1>,<1,1,1,1> >
< <2>,<2,2,2,2> >
< <3>,<3,3,3,3> >
< <4>,<4,4,4,4> >
并且我有一个单独的向量 v1
,其值类似于
<1,3,4>
现在我想要做什么的方法是将向量添加到映射中的第一个、第三个和第四个向量,结果应该存储在一个新的映射中,例如 mtot
,因为
< <1,3,4>,<8,8,8,8> >
这是我的以下尝试,导致分段错误: 任何帮助、改进甚至您的实施想法都将不胜感激。
s_t stemp,stemp1;
v_t vtot(4); //I know the size
typedef v_t::iterator v_it;
typedef m_t::iterator m_it;
// Assume I've v1 and m1 in hand
for(v_it it(v1.begin());it != v1.end();++it)
{
stemp1.insert(stemp1.end(),*it);
m_it mit = m1.find(stemp1);
copy(mit->second.begin(),mit->second.end(),ostream_iterator<int>(cout," ")); cout << endl; // Debug not working. There is some problem with the iterator I guess
transform(mit->second.begin(),mit->second.end(),vtot.begin(),vtot.begin(),plus<double>());
stemp1.clear();
}
stemp.insert(v1.begin(),v1.end());
mtot.insert(mtot.end(),make_pair(stemp,vtot));
}
谢谢。
I've a data structure as follows
typedef vector<double> v_t;
typedef set<int> s_t;
typedef map<s_t, v_t> m_t;
Lets say the map m1
that has following values :
< <1>,<1,1,1,1> >
< <2>,<2,2,2,2> >
< <3>,<3,3,3,3> >
< <4>,<4,4,4,4> >
and I've a separate vector v1
that has values like
<1,3,4>
Now what I want to do is to add the vectors the first, third and fourth vectors in the map and the result should be stored in a new map say mtot
as
< <1,3,4>,<8,8,8,8> >
Here is my following try that results in a segmentation fault:
Any help, improvement or even your idea of implementation is greatly appreciated.
s_t stemp,stemp1;
v_t vtot(4); //I know the size
typedef v_t::iterator v_it;
typedef m_t::iterator m_it;
// Assume I've v1 and m1 in hand
for(v_it it(v1.begin());it != v1.end();++it)
{
stemp1.insert(stemp1.end(),*it);
m_it mit = m1.find(stemp1);
copy(mit->second.begin(),mit->second.end(),ostream_iterator<int>(cout," ")); cout << endl; // Debug not working. There is some problem with the iterator I guess
transform(mit->second.begin(),mit->second.end(),vtot.begin(),vtot.begin(),plus<double>());
stemp1.clear();
}
stemp.insert(v1.begin(),v1.end());
mtot.insert(mtot.end(),make_pair(stemp,vtot));
}
Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
容器
您插入的这一行没有插入到适当的位置,并且不是结果
this line you insert not in appropriate position and not the resulting container
it can be
由于
xitx
的回答,我认为您的代码现在可以工作了。我在您的代码中没有特别发现重大问题。
顺便说一下,不需要为
insert
成员函数指定iterator
set
和map
。供您参考,我测试时以下代码有效:
希望这有帮助
I presume your code works now thanks to
xitx
's answer.I couldn't find significant problems in your code particularly.
Incidentally,
iterator
doesn't need to be specified forinsert
member functionof
set
andmap
.For your information, the following code worked when I tested:
Hope this helps