Quote Originariamente inviata da aleRomatre Visualizza il messaggio
Il 51 l'ho scritto in quanto scrivendo "3" come una stringa eclipse mi dava errore... non ho provato con l'apice '3'.

"3" è la stringa C "3", ovvero un array di due caratteri ('3' seguito dal carattere di terminazione 0); '3' è il carattere 3, ovvero un modo comodo per scrivere 51 (sulle piattaforme dove si usa ASCII) o comunque il codice carattere corrispondente sulle altre piattaforme (per dire, su EBCDIC il '3' è 243).
Mi sa allora che non ho ben capito il tuo metodo... puoi spiegarmelo per favore in maniera più approfondita?
Cosa sono size_t e prefix? Perchè usi template( non sono molto esperto)? La funzione rfind su s che fa? Grazie mille
È che ho scritto la funzione in maniera un po' più generica, in modo che possa essere usata su qualunque mappa da stringa a qualche tipo di elemento, con prefissi di qualunque lunghezza.
size_t è un tipo intero senza segno che si usa normalmente per indicare numeri di elementi; di fatto su macchine a 32 bit puoi usare int senza remore.
prefix è il prefisso da cercare (nel tuo caso sarà "3"); la roba della rfind è sostanzialmente un modo convoluto ma compatto per vedere se una stringa inizia con un'altra.
Il template serve per fare in modo che la funzione possa operare per le mappe da stringhe a qualunque altro tipo.

In ogni caso, tolte tutte queste finezze si può semplicemente aggiustare il tuo codice per usare la lower_bound:
codice:
    int count=0;
    for(mapa::iterator it=m.lower_bound("3");
        it!=m.end() && it->first[0]=='3';
        ++it) {
        count++;
    }