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

How to define the value type for iterator which points to an element in another container in c++

我想达到的目的是: 我有一个 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

这是 demo


您似乎在尝试添加一个反向迭代器,因为您想方便地获取指向列表中最后一个元素的迭代器。你可以这样做:

mp[1] = std::prev(lst.cend(), 1);