如何定义迭代器的值类型,迭代器指向c++中另一个容器中的元素



我想要达到的目的是:我有unordered_map<int, list<int>::iterator> mplist<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);

最新更新