我的数据结构如下
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));
}
感谢。
答案 0 :(得分:2)
此行不是在适当的位置插入而不是生成的容器
mtot.insert(sample.end(),make_pair(stemp,vfinal));
可以是
mtot.insert(mtot.end(),make_pair(stemp,vtot));
答案 1 :(得分:1)
由于xitx
的回答,我认为你的代码现在有效
我特别在代码中找不到重大问题
顺便说一句,不需要为iterator
成员函数指定insert
set
和map
为了您的信息,以下代码在我测试时起作用:
int main() {
m_t m1, mtot;
s_t s;
s.clear(); s.insert( 1 ); m1[ s ].assign( 4, 1 );
s.clear(); s.insert( 2 ); m1[ s ].assign( 4, 2 );
s.clear(); s.insert( 3 ); m1[ s ].assign( 4, 3 );
s.clear(); s.insert( 4 ); m1[ s ].assign( 4, 4 );
v_t v1;
v1.push_back( 1 );
v1.push_back( 3 );
v1.push_back( 4 );
v_t vtot(4);
for(v_it it(v1.begin());it != v1.end();++it)
{
s_t stemp1;
stemp1.insert(*it);
m_it mit = m1.find(stemp1);
if ( mit == m1.end() ) continue;
copy(mit->second.begin(),mit->second.end(),ostream_iterator<int>(cout," ")); cout << endl;
transform(mit->second.begin(),mit->second.end(),vtot.begin(),vtot.begin(),plus<double>());
}
s_t stemp(v1.begin(),v1.end());
mtot.insert(make_pair(stemp,vtot));
}
希望这有帮助