Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从多重映射(C+;+;)中完全删除元素_C++_Stl_Containers_Multimap_Erase - Fatal编程技术网

C++ 从多重映射(C+;+;)中完全删除元素

C++ 从多重映射(C+;+;)中完全删除元素,c++,stl,containers,multimap,erase,C++,Stl,Containers,Multimap,Erase,我有一个多重映射,其中键是一个结构,值是另一个结构 multimap<struct, struct> multimap1; 我试图从多重贴图中删除一个值和一个键。假设我想删除multimap的第二个条目。结果应该是: 1: Random Value 1 3: Random Value 3 4: Random Value 4 我有一个迭代器,它指向第二个值,所以当我使用multimap1.erase(it)删除它时,它应该删除第二个条目(至少我认为应该删除)。我一直在阅读有关删除条

我有一个多重映射,其中键是一个结构,值是另一个结构

multimap<struct, struct> multimap1;
我试图从多重贴图中删除一个值和一个键。假设我想删除multimap的第二个条目。结果应该是:

1: Random Value 1
3: Random Value 3
4: Random Value 4

我有一个迭代器,它指向第二个值,所以当我使用
multimap1.erase(it)
删除它时,它应该删除第二个条目(至少我认为应该删除)。我一直在阅读有关删除条目和多重映射的内容,似乎只有值从多重映射中删除,而不是键。因此,如果使用指向第二个值的迭代器擦除第二个条目,它会这样做(如果我错了,请更正我):

有没有办法得到中间值的结果

编辑:所以我显然错了。如果你删除,你会得到中间的结果。我试图找出为什么我没有正确地擦除,因为当我调用擦除时,我的代码会出错。如果我调用
it->first
,它将返回要删除的元素的键。如果我调用
it->second
,它将返回该键的值。所以如果我调用
multimap.erase(它)
,它应该会删除整个东西,对吗

编辑2:在我的代码中,我打印了
it->first
it->second
,以确保指针指向正确的元素,并且它是正确的。当我调用
multimap.erase(it)
时,我停止了循环并打印出multimap中的其余元素。它正确地打印第一个元素,但第二个元素的打印方式如下(编译器的输出):

显然,它没有正确删除。我正在linux上运行g++4.7


编辑3:很抱歉这么多的编辑,我想保留原来的问题,这样人们以后可以参考它。为了进行实验,我调用了
multimap.erase(它->first)
,结果正常。有人能给我解释一下为什么会这样做以及这里发生了什么吗?

erase
会根据需要删除整个条目(“键值”对)


有时,在讨论映射类型时会出现混淆,因为库规范将
value\u-type
定义为“key-value”对,而不仅仅是“value”(定义为
map\u-type
);因此,单词“value”可以互换地表示一个或另一个。

erase
会根据需要删除整个条目(“key-value”对)


有时,在讨论映射类型时会出现混淆,因为库规范将
value\u-type
定义为“key-value”对,而不仅仅是“value”(定义为
map\u-type
);因此,“值”这个词可以互换地表示一个或另一个。

“似乎只有值从多重映射中删除,而不是键。”这不是真的,我很好奇是什么让你这么想的。我有一个循环,可以使用迭代器删除某些元素,但我很快停止了循环。然后我打印了剩余的多重映射,但打印不正确。@已擦除元素的OGH迭代器无效。这是人们常犯的错误,他们在循环中对迭代器调用
erase
,然后递增相同的(无效的)迭代器。也许你也犯了同样的错误?我读到了。我不这么做,因为在C++ 11中,可以调用“it = MultMaP。擦除(it)”,它将擦除值,然后指向“下一个值”。此外,我还尝试调用了
multimap.erase(it++)
,但也没有成功。只是在问题中添加了另一个编辑。“似乎只有值从多重映射中删除,而不是键。”这不是真的,我很好奇是什么让你这么想。我有一个循环,可以使用迭代器删除某些元素,但我很快就停止了循环。然后我打印了剩余的多重映射,但打印不正确。@已擦除元素的OGH迭代器无效。这是人们常犯的错误,他们在循环中对迭代器调用
erase
,然后递增相同的(无效的)迭代器。也许你也犯了同样的错误?我读到了。我不这么做,因为在C++ 11中,可以调用“it = MultMaP。擦除(it)”,它将擦除值,然后指向“下一个值”。此外,我还尝试调用了
multimap.erase(it++)
,但也没有成功。刚刚在问题中添加了另一个编辑。
1: Random Value 1
3: Random Value 3
4: Random Value 4
1: Random Value 1
2: 
3: Random Value 3
4: Random Value 4
GEWolfC?`6??2?x3??2??2?x 1@4?????BUYA????BadWolfCorp1????AMstyKrq?4?X3??(4??3?    
X3PlanetExpress1GEqp7?L???5?d?5?x5??5?d2q7?7?X3??(4??3?X3??