Newsgroup: it.comp.lang.c++
Titolo: Array associativi?

Sapete dirmi quali sono gli array associativi, possibilmente con un esempio
di sorgente, e quali sono gli altri tipi di array?
Io conosco semplicemente
int myarray [10]  (ovviamente con vari tipi e n di elementi)
oppure un <vector>int myvec(20)
Quali sono i pregi e difetti di queste varie forme di array?
Grazie
Luigi
--
Non è stato rilevato nessun bug nel sistema.
Si desidera crearne uno?
-- 
Posted from [151.39.48.6] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 Quali sono i pregi e difetti di queste varie forme di array?
Il primo č un vero e proprio array, un costrutto di basso livello
ereditato dal C che andrebbe utilizzato il meno possibile in C++. Il
secondo č uno std::vector e cioč un tipo della libreria standard che
consente di gestire comodamente array a dimensione variabile senza far
uso di puntatori e allocazione dinamica (ci pensa la classe stessa).
L'array associativo č certamente meno efficiente degli altri ma in
taluni casi puň essere molto utile.
EMG

fornita a fungere da selettore.
significa che si può fare qualcosa del tipo  mymap["i"] = un numero..  ?
nell'esempio mymap[ "Pippo" ] = 123 che significa?
Non credp sia un'inizializzazione perchè "Pippo" sono 5 caratteri e 123 è un
unico numero... boh! Non ho mai visto una cosa simile, puoi aiutarmi?
Grazie.
--
Non è stato rilevato nessun bug nel sistema.
Si desidera crearne uno?
-- 
Posted from [195.223.215.6] 


 unico numero... boh! Non ho mai visto una cosa simile, puoi aiutarmi?
Significa che mymap contiene (o conterrà in seguito a quell'istruzione)
un elemento con chiave "Pippo" al quale viene attribuito il valore 123.
Se mymap fosse un normale array (myarray) si dovrebbe scrivere qualcosa
come
myarray[ 5 ] = 123;
che significa metti il valore 123 nell'elemento etichettato con 5 (negli
array, che hanno il vincolo di dover avere i loro elementi disposti in
memoria sequenzialmente, sarebbe il sesto elemento a partire dal primo
che viene etichettato con zero). Invece nelle std::map, non essendoci il
vincolo della sequenzialità degli elementi, questi possono venire
etichettati con qualsiasi tipo di dato e in questo modo si può
implementare un array associativo e cioè un array che "associa" una
chiave ad un valore.
EMG

chiave ad un valore.
Come posso fare per visualizzare tutti gli elementi contenuti un una std::map ?
Paolo
-- 
E-Mail   : 
paolo.be...@tin.it
Sito web : 
http://web.tiscalinet.it/paolo_bernardi
PGP Key  : 
http://web.tiscalinet.it/paolo_bernardi/pbkey.asc

Allora quali di queste operazioni si possono fare?
mymap["i"] = 4;
mymap["Pi"] = 4;
mymap["Pippo"] = 4;
mymap["P+i"] = 4;
Grazie.
--
Non è stato rilevato nessun bug nel sistema.
Si desidera crearne uno?
-- 
Posted from [151.39.48.6] 


 std::map ?
std::map è sostanzialmente un contenitore di std::pair. Quindi è
sufficiente iterare da begin() a end() tenendo presente che la chiave e il
valore risiedono ripettivamente nel membro first e second dei vari
elementi.
Ad es:
 template< class PAIR >
 struct pair_printer {
  void operator()( const PAIR& v )
  {
   cerr << v.first << ": " << v.second << endl;
  }
 };
 typedef std::map<std::string,int>           map_type;
 typedef pair_printer<map_type::value_type>  map_printer;
 map_type   mappa;
 std::for_each( mappa.begin(), mappa.end(), map_printer() );
Max

 Come posso fare per visualizzare tutti gli elementi contenuti un una std::map ?
Con un iteratore:
for ( std::map < std::string, int >::iterator i = mymap.begin(); i !=
mymap.end(); ++i )
    std::cout << i -> first << " - " << i -> second << '\n';
std::cout << std::endl;
EMG

 mymap["P+i"] = 4;
Tutte e quattro ma forse non con il significato che pensi. Intanto
ognuna di essere crea un nuovo elemento nella mymap con la chiave
specificata tra virgolette (se questo non esiste già). E poi tieni
presente che le stringhe specificate non sono variabili né espressioni e
quindi quando scrivi
mymap["P+i"] = 4;
non stai facendo nessuna somma (come forse erroneamente credevi) ma
semplicemente crei (o modifichi se già esiste) un elemento con chiave
"P+i" letteralmente (cioè formata dai tre caratteri 'P', '+' e 'i'.
EMG