C++ std::map末尾的减量

C++ std::map末尾的减量,c++,stl,C++,Stl,这是我的密码: #include <iostream> #include <map> using namespace std; int main() { map<int , int > myMap; map<int , int>::iterator it; myMap.insert(pair<int , int>(1,2)); myMap.insert(pair<int , int>(6

这是我的密码:

#include <iostream>
#include <map>
using namespace std;

int main() {
    map<int , int > myMap;

    map<int , int>::iterator it;

    myMap.insert(pair<int , int>(1,2));
    myMap.insert(pair<int , int>(671,223));
    myMap.insert(pair<int , int>(353,245352));

    it = myMap.end() - 1;

    cout << it->first << it->second << endl;

    return 0;
}
#包括
#包括
使用名称空间std;
int main(){
地图我的地图;
对它进行迭代器;
myMap.insert(对(1,2));
myMap.insert(对(671223));
myMap.insert(对(353245352));
it=myMap.end()-1;

cout first second并非所有迭代器类别都支持算术运算,这是一个误解。如果您打算编写更多通用代码,可以使用:

它需要一个双向迭代器,而
std::map
的迭代器是。如果您希望将迭代器移动多个步骤,它还可以接受第二个参数,该参数指定了迭代器移动的距离


此外,当您将随机访问迭代器传递给它时,它将与算术运算一样快。

我建议您阅读有关不同的内容,并了解它们的可用操作


更具体地说,迭代器是一个没有二进制减法的函数。

错误:“prev”不是“std”的成员,我得到了这个错误。我需要一些头文件吗?@BhawandeepSingla-
@BhawandeepSingla
boost::prev
,那么@Angew或者,为了避免仅仅为了这个而拉入整个boost,
It=myMap.end();--it;
(但是如果您仍然不能使用C++11,那么我强烈建议使用boost-for
boost::shared\u ptr
boost::noncopyable
,以及
boost\u FOREACH
(如果没有其他功能的话)@YSC如果您想要的代码违反标准实践,因此在众所周知的“每分钟WTFs”代码质量度量中得分很低是的,可以。此外,最好使用一些重的
enable_if
s来完成,将其限制为仅限迭代器,因为这样的模板非常贪婪。此外,你不能在ADL可以获取它的
std
内合法地完成它。总之,我不会这么做。
error: no match for ‘operator-’ (operand types are ‘std::map<int, int>::iterator {aka std::_Rb_tree_iterator<std::pair<const int, int> >}’ and ‘int’)
  it = myMap.end() - 1;
it = std::prev(myMap.end());