0

我想要达到的目的是:我有一个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]);
...

我也尝试存储原始指针,但我无法使用原始指针擦除列表中的元素。我想知道实现我的目的的最佳方式是什么。

4

1 回答 1

2

您将错误类型的迭代器放入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);
于 2020-09-28T21:51:54.503 回答