【发布时间】:2016-06-10 15:32:08
【问题描述】:
我是初学者。假设我创建了
map<int, node*> mp;
节点在哪里
struct node{
node *previous;
int key; // I have no idea why there is a key variable in this node
int value;
node *next
};
所以map有int键,指向一个双向链表的节点。
假设我按顺序插入了以下元素。
<key,(let corresponding node.value element be)>
<5, 1>
<10,2>
<8, 3>
所以双向链表看起来像:
1<->2<->3
现在,如果我想在现有节点之间插入一个节点值为 2,3 的新节点。所以我创建了一个新的地图元素。
<key,(let corresponding node.value element be)>
<7, 4>
并且(新调整的)双向链表看起来像:(根据我的要求)
1<->2<->4<->3
哪个元素会 mp.erase(mp.end());删除,为什么?
我写了一个示例程序,其中地图元素被删除了。为什么会这样?
仅供参考:我正在为 LRUcache 代码工作。
【问题讨论】:
-
map.erase(map.end());是一个错误; end-iterators 代表一个单一的状态(例如过去的结束或特殊状态)。地图不保留插入顺序;如果您删除地图的最后一个元素,那么它将是具有最大排序键的元素 -
@M.M 但它对我来说非常好用。它正在删除一个元素
-
正如@M.M 所说
map.erase(map.end());是一个错误 并导致未定义的行为:map.erase( map.end() )? 或std::map::erase[...]The iterator pos must be valid and dereferenceable. Thus the end() iterator (which is valid, but is not dereferencable) cannot be used as a value for pos.[...] -
@sql_dummy 见What is undefined behaviour?
-
“我读了 map.erase(map.end()); 删除了地图的最后一个元素”。这是不正确的。你在哪里读到的?
标签: c++ dictionary