所以我有一个multimap,其中键是一个struct,值是另一个struct。
multimap<struct, struct> multimap1;
multimap1
包含(格式为key
:value
)
1: Random Value 1
2: Random Value 2
3: Random Value 3
4: Random Value 4
我正在尝试从多图中删除一个值和一个键。假设我要删除多图的第二个条目。结果应该是这样的:
1: Random Value 1
3: Random Value 3
4: Random Value 4
我有一个指向第二个值的迭代器,所以当我使用multimap1.erase(it)
擦除它时,它应该删除第二个条目(至少我认为它应该)。我一直在阅读删除条目和多图,似乎只从多图中删除了值,而不是键。因此,如果使用指向第二个值的迭代器擦除第二个条目,它将执行此操作(如果我错了,请纠正我):
1: Random Value 1
2:
3: Random Value 3
4: Random Value 4
有没有办法获得中间值结果?
编辑:所以我显然错了。如果你擦除了,你会得到中间结果。我想弄清楚为什么我没有正确擦除因为,当我调用擦除时,我的代码段错误。如果我调用it->first
,它将返回我想要删除的元素的键。如果我调用it->second
,它将返回该键的值。所以如果我打电话给multimap.erase(it)
,它应该删除整件事,对吗?
编辑2:在我的代码中,我打印出it->first
和it->second
以确保指针指向正确的元素,它就是。当我调用multimap.erase(it)
时,我停止循环并打印出多图中的其余元素。它正确打印第一个元素,然后第二个元素打印出这样的东西(编译器输出):
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??
很明显,它没有正确删除。我在linux上运行g ++ 4.7。
编辑3:很抱歉这么多编辑,我想保留原来的问题,以便人们将来可以参考它。只是为了实验,我打电话给multimap.erase(it->first)
并且工作正常。有人可以向我解释为什么这有效以及这里发生了什么?
答案 0 :(得分:1)
erase
会根据需要删除整个条目(“键值”对)。
有时,在讨论地图类型时会产生混淆,因为库规范将value_type
定义为“键值”对,而不仅仅是“值”(定义为mapped_type
);所以“价值”这个词用于互换是指其中一个。