我想要达到的目的是:我有unordered_map<int, list<int>::iterator> mp
和list<int> lst
。如何在lst
中存储元素的迭代器。稍后,通过使用map中的迭代器,我可以操作(例如,擦除(列表中的元素。(假设没有迭代器无效问题(以下片段不起作用:
unordered_map<int, list<int>::const_iterator> mp;
list<int> lst;
lst.push_back(1);
mp[1]=lst.crbegin(); //error here
lst.erase(mp[1]);
...
我也尝试过存储原始指针,但无法使用原始指针擦除列表中的元素。我在想什么是实现我目标的最佳方式。
您将错误类型的迭代器放入unordered_map
:
unordered_map<int, list<int>::const_iterator> mp;
// ...
mp[1] = lst.crbegin(); // error, const reverse iterator
mp[1] = lst.cbegin(); // ok
如果您希望unordered_map
的值类型包含反向迭代器,则需要指定:
unordered_map<int, list<int>::const_reverse_iterator> mp;
// ...
mp[1] = lst.cbegin(); // error, const forward iterator
mp[1] = lst.crbegin(); // ok
这是一个演示。
您似乎正在尝试添加一个反向迭代器,因为您想方便地将迭代器添加到列表中的最后一个元素。你可以用
mp[1] = std::prev(lst.cend(), 1);