Sto utilizzando il metodo find()
di std::map
, che restituisce un iteratore.
Tuttavia ho bisogno dell'indice dell'elemento trovato; ad esempio: 0, che corrisponde a std::map::begin()
e così via.Stampa dell'indice di un iteratore in std :: map
#include <map>
#include <utility>
#include <iostream>
int main()
{
std::map< int, int > aMap;
aMap.insert(std::make_pair(100, 50));
aMap.insert(std::make_pair(200, 40));
aMap.insert(std::make_pair(300, 60));
std::map< int, int >::iterator it_map = aMap.find(300);
if (it_map != aMap.end())
std::cout << it_map << "\n"; // error
}
Che non viene compilato e conosco il motivo. Tuttavia, ho bisogno di un modo per stampare 2
perché l'indice di 300 è 2.
Per questo semplice esempio, si può dire che la mappa (albero binario) non è un buon contenitore. Tuttavia, nel codice reale, ci sono un sacco di elementi che devo cercare e l'albero binario fa bene.
Qualche idea?
Come si definisce l'indice di una struttura ad albero binario ? – 101010
@ 40two: una mappa non è necessariamente implementata come albero e non ha un'interfaccia ad albero; ma è ordinato, quindi puoi definire un indice secondo quell'ordine come la domanda descrive. –
@MikeSeymour Come da standard non è necessariamente implementato come albero, concordato. Tuttavia, in ogni implementazione che conosco è implementato come un albero. Inoltre, quando si verifica un inserimento o un'estrazione, qualsiasi ordine precedente viene disturbato. Di conseguenza, come la tua risposta afferma correttamente, puoi definire un indice ma solo per lo stato della corrente 'std :: map'. – 101010