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

C++ 如何定义迭代器的值类型,该迭代器指向c+中另一个容器中的元素+;,c++,c++11,stl,iterator,C++,C++11,Stl,Iterator,我想达到的目的是: 我有一个无序的地图mp和一个列表lst。如何在lst中存储元素的迭代器。稍后,通过使用map中的迭代器,我可以操作(例如,擦除)列表中的元素。(假设没有迭代器失效问题) 以下代码段不起作用: 无序地图mp; 列表lst; 一、推回(1); mp[1]=lst.crbegin()//这里出错 一次擦除(mp[1]); ... 我还尝试存储原始指针,但无法使用原始指针擦除列表中的元素。我想知道实现我的目标的最佳方式是什么。您在无序的映射中放置了错误的迭代器: unordered

我想达到的目的是: 我有一个
无序的地图mp
和一个
列表lst
。如何在
lst
中存储元素的迭代器。稍后,通过使用map中的迭代器,我可以操作(例如,擦除)列表中的元素。(假设没有迭代器失效问题) 以下代码段不起作用:

无序地图mp;
列表lst;
一、推回(1);
mp[1]=lst.crbegin()//这里出错
一次擦除(mp[1]);
...

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

您在无序的
映射中放置了错误的迭代器:

unordered_map<int, list<int>::const_iterator> mp;
// ...
mp[1] = lst.crbegin();  // error, const reverse iterator
mp[1] = lst.cbegin();   // ok
这是一个例子


似乎您正在尝试添加一个反向迭代器,因为您希望方便地将迭代器添加到列表中的最后一个元素。您可以通过以下方式实现:

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

您将错误类型的迭代器放入无序映射中:

unordered_map<int, list<int>::const_iterator> mp;
// ...
mp[1] = lst.crbegin();  // error, const reverse iterator
mp[1] = lst.cbegin();   // ok
这是一个例子


似乎您正在尝试添加一个反向迭代器,因为您希望方便地将迭代器添加到列表中的最后一个元素。您可以通过以下方式实现:

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

正向和反向迭代器是不同的类型。正向和反向迭代器是不同的类型。谢谢你的回答。我现在明白原因了。但是,如果我使用
常量迭代器
在map中键入。如何将列表中最后一个元素的迭代器添加到映射中。问题是:如果我使用
const\u reverse\u迭代器作为值类型,我无法调用
lst.erase(mp[1])
@kz28
std::next(lst.cend(),-1)
应该这样做,所以根本不需要反向迭代器。列表最好不要为空。@kz28编辑了答案以显示使用反向迭代器的替代方法。谢谢您的回答。我现在明白原因了。但是,如果我使用
常量迭代器
在map中键入。如何将列表中最后一个元素的迭代器添加到映射中。问题是:如果我使用
const\u reverse\u迭代器作为值类型,我无法调用
lst.erase(mp[1])
@kz28
std::next(lst.cend(),-1)
应该这样做,所以根本不需要反向迭代器。列表最好不要为空。@kz28编辑了答案以显示使用反向迭代器的替代方法。