在我的代码中,我有一张地图(tBoxes
),vector<int>
开始关键,set< pair<int,int> >
是值。
出于某种原因,当我尝试访问地图的特定元素时,程序会因分段错误而崩溃。如果我通过valgrind运行程序一切都很好(这就是我知道元素是空的)。此外,valgrind没有说明任何内存泄漏。我正在使用的循环是一个天真的循环:
map<vector<int>,set<int, int> > tBoxes;
/*populate boxes*/
vector<int> t(3,0);
set<pair<int, int> >::iterator it;
for(int i = mini; i <= maxi; i++){
t[0] = i;
for (int j = minj; j <= maxj; j++){
t[1] = j;
for (int k = mink; k <= maxk; k++){
t[2] = k;
it = tBoxes[t].begin();
while (it != tBoxes[t].end()){
it++;
}
}
}
}
编辑:
由于我使用了奇怪的变量名,因此代码不是我文件中的直接副本。
我怀疑这是地图内存分配的问题,但我不知道如何解决这个问题。此外,该值为set
而非vector
。
答案 0 :(得分:2)
for (int k = mink; k <= maxj; k++){ // should'n it be maxk?
旧的“复制粘贴”错误:D
编辑:Op更改了代码并更正了我指出的内容,因此这个答案不再有效......
答案 1 :(得分:0)
编辑: 完全重写以将int插入到一组int中,然后将这些int插入到int组向量的向量映射中。 (Sic。)然后检索原始的int。
int main( int argc, char *argv )
{
map< vector<int>, set<int> > tBoxes;
vector<int> vecInsert( 3, 0 );
set<int> setInsert;
setInsert.insert( 666 );
tBoxes.insert( std::make_pair( vecInsert, setInsert ) );
///////////////////////////////////////////////////////////
vector<int> vecLookup( 3, 0 ); //identical to vecInsert
set<int> setLookup = tBoxes[vecLookup]; //the set mapped by the 'key' vector above
set<int>::iterator iter = setLookup.begin(); //the first element in the set
if( iter != setLookup.end() )
{
int i = *iter;
if( i == 666 )
{
//eureka!!
}
}
return 0;
}