a 的反向迭代器std::map.rbegin()
返回包含 a 中最大 key_type 的元素的位置std::map
。
可以使用返回的位置访问具有最大 Key 的元素,map.rbegin()
如下所示:
map.rbegin()->first
但是返回的位置map.rbegin()
不能用来擦除这个元素。
为什么我可以访问但不能删除相同的位置?
std::map <unsigned int, std::string> map;
map.emplace(5, "aaa");
map.emplace(7, "bbb");
map.emplace(3, "ccc");
cout << map.rbegin()->first << " : " << map.rbegin()->second << endl; //Reverse iterator works for accessing the element
map.erase(map.rbegin()); //Erase the largest element in the map - Error C2664 converting argument 1 from 'std::reverse_iterator<std::_Tree_iterator<std::_Tree_val<std::_Tree_simple_types<_Ty>>>>' to 'std::_Tree_iterator<std::_Tree_val<std::_Tree_simple_types<_Ty>>>'
map.erase(std::prev(map.end())); //Erase the largest element in the map - WORKS
map.erase(std::prev(map.rbegin().base())); //Erase the largest element in the map - WORKS
在我看来,如果一个函数/方法需要一个迭代器来获得一个位置,那么它是什么类型的迭代器并不重要。
如果该迭代器描述的不仅仅是一个位置(例如方向,也......),事情会有所不同
注意:我没有问“如何使用反向迭代器调用擦除? ”,我在代码的最后一行提供了这个操作的解决方案。
我在问为什么我不能用反向迭代器擦除。std::map::reverse_iterator
即,std::map:iterator
如果 STL 只需要使用它来获取要擦除的一个元素的位置,为什么不简单地将其转换为。