从multimap中完全删除元素(c++)
deleting elements completely from multimap (C++)
所以我有一个multimap,其中键是一个结构体,值是另一个结构体。
multimap<struct, struct> multimap1;
multimap1
包含(格式为key
: value
)
1: Random Value 1
2: Random Value 2
3: Random Value 3
4: Random Value 4
我正试图从multimap中删除一个值和一个键。假设我想删除multimap的第二个条目。结果应该是这样的:
1: Random Value 1
3: Random Value 3
4: Random Value 4
我有一个指向第二个值的迭代器,所以当我使用multimap1.erase(it)
擦除它时,它应该删除第二个条目(至少我认为它应该)。我一直在阅读从multimap中删除条目,似乎只有值从multimap中删除,而不是键。因此,如果使用指向第二个值的迭代器擦除第二个条目,它将这样做(如果我错了请纠正我):
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)
时,我停止循环并打印出multimap中剩余的元素。它正确地打印了第一个元素,但是第二个元素被打印成这样(编译器的输出):
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)
,这工作正确。有人能给我解释一下为什么这个工作,这里发生了什么?
erase
会根据需要删除整个条目("key-value"对)。
有时,当讨论映射类型时,会产生混淆,因为库规范定义value_type
表示"键-值"对,而不仅仅是"值"(定义为mapped_type
);因此,"value"这个词可以互换地表示其中之一
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 使用strcpy将char数组的元素复制到另一个数组
- 使用不带参数的函数访问结构元素
- 给定n个元素的m个集合.在C++中找到出现在最大集合数中的元素
- C++如何通过用户输入删除列表元素
- lower_bound()返回最后一个元素
- 基于多个条件处理地图中的所有元素
- 调整大小后指向元素值的指针unordered_map有效?
- 使用std::transform将一个范围的元素添加到另一个范围中
- 使用函数"remove"删除重复元素
- 具有最大子序列大小的序列,每个元素都相同
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 如何将元素添加到数组的线程安全函数?
- 有没有办法将谓词中的元素偏移量传递给 std 算法?
- 我想访问std::unique_ptr中的一个特定元素
- 如何通过 getter 函数删除矢量的元素?
- 向量元素的引用地址与它所指向的向量元素的地址不同.为什么
- 从控制台中删除最后打印的元素
- 擦除while循环中迭代的元素