È simile a this question ma non è un duplicato. Sto cercando di scorrere una mappa e stampare i valori di ogni elemento, ma con un output leggermente diverso sull'ultimo elemento. In questa domanda, si consiglia di utilizzare map.rbegin().base()
, ma non funziona per me.Rileva se iteratore è l'ultimo elemento di std :: map
Ecco il mio codice:
#include <iostream>
#include <map>
int main()
{
std::map <char, int> charMap = { {'a', 1}, {'b', 2}, {'c', 3}, {'d', 4} };
for (auto iter = charMap.begin(); iter != charMap.end(); iter++)
{
std::cout << iter->first << ":\t" << iter->second;
if (iter == charMap.rbegin().base())
std::cout << "\t//This is the last element.\n";
else
std::cout << "\n";
}
}
mi aspetto la mia uscita a guardare come questo:
a: 1
b: 2
c: 3
d: 4 //This is the last element.
Ma invece, sto ottenendo questo output:
a: 1
b: 2
c: 3
d: 4
Ora capisco che c'è un modo migliore per farlo, ma mi aspetto che funzioni anche. Perché non riesco a confrontare iter
e charMap.rbegin().base()
?
noti che in tali situazioni è spesso facile riscrivere corpo del ciclo tale che la gestione speciale avviene per la prima piuttosto che l'ultimo elemento. –
@ChristianHackl Nota, ovviamente questo non è il caso qui :) – BartoszKP
@BartoszKP: Perché no? Avvia ogni riga ma la prima con un'interruzione di riga, metti il "Questo è l'ultimo elemento" dopo il ciclo. –