sort librerias libreria geeksforgeeks functions c++ stl

c++ - librerias - Decremento de fin de std:: mapa



stl class c++ (2)

Aquí está mi código:

#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; }

Compilar este código produce el siguiente error de compilación:

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;

No sé por qué estoy obteniendo este error, ya que creo que las operaciones aritméticas están permitidas en todos los tipos de iteradores.



No todas las categorías de iteradores admiten operaciones aritméticas, eso es una idea errónea. Si intenta escribir un código más genérico, puede usar std::prev :

it = std::prev(myMap.end());

Espera un iterador bidireccional, que es el iterador de std::map . Si desea mover el iterador más de un solo paso, también puede aceptar un segundo parámetro que designe qué tan lejos mover el iterador.

Además, cuando le pase un iterador de acceso aleatorio, será tan rápido como la aritmética.