如何解决如何定义迭代器的值类型,该值类型指向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);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。