Newsgroup: it.comp.lang.c++
Titolo: Organizzazione

Ciao a tutti,
vorrei chiedervi quale, secondo voi, sia la migliore soluzione ( map,
multimap, o quant'altro) per l'organizzazione di
una struttua dati.
i dati da organizzare sono :
__________________________________________
dove vettore_1 rappresenta un vettore di puntatori a N elementi.
| campo_1 | campo_2 | vettore_1 |
-----------------------------------
| campo_1 | campo_2 | vettore_1 |
-----------------------------------
| campo_1 | campo_2 | vettore_1 |
-----------------------------------
dove campo_1 e campo_2 rappresentano le chiavi di accesso al vettore_1
__________________________________________
avevo pensato ad una struttura del genere :
map <key, vector<mio_tipo>>.
L'insicurezza nasce dal fatto che non so se la mappa accetta come key una
struttura di 2 campi.
Suggerimenti ?
grazie.

 Suggerimenti ?
std::map<Key,Data,Compare=less<Key>,Alloc=alloc>
Template parameters
Key     The map's key type. This is also defined as map::key_type. 	
Data    The map's data type. This is also defined as map::data_type. 	
Compare The key comparison function, a Strict Weak Ordering whose
         argument type is key_type; it returns true if its first argument
         is less than its second argument, and false otherwise. This is
         also defined as map::key_compare.
Alloc   The map's allocator, used for all internal memory management.
Type requirements
* Data is Assignable.
* Compare is a Strict Weak Ordering whose argument type is Key.
* Alloc is an Allocator.
nel tuo caso:
typedef std::pair<int,int> map_key;
typedef std::vector<int*>  map_data;
std::map< map_key, map_data >
* std::vector<T> è assignable
* less<T> richiede che T sia LessThanComparable, std::pair<T1,T2> offre
   questa garanzia se sia t1 che t2 sono LessThanComparable.. quindi il
   parametro di default di Compare è ok
* l'allocator di default ti sta bene.
std::multimap ti servirebbe se una singola std::pair<int,int> potesse 
avere come Data diversi std::vector<int*>
-- 
sbi

Ti ringrazio mille,
mi stavo documentando appunto sul fatto che se si potesse fare
una associazione del tipo  :
    std::map< map_key, map_data >
Che tu sappia, le map offrono anche un accesso diretto all'elemento ?
bye.

 Che tu sappia, le map offrono anche un accesso diretto all'elemento ?
non ho capito la domanda.
-- 
sbi

typedef std::pair<int,int> map_key;
typedef std::vector<int*>  map_data;
std::map< map_key, map_data >
No, è una domanda fatta senza ragionare mi sono risposto da solo.
Volevo solo dire che dato la map_key mi restituisce automaticamente
il map_data.
Internamente, per restituirti il map_data, che tipo di ricerca fa  ?
grazie.


internamente è un red-black tree, la complessità della ricerca è 
garantita logaritmica dallo standard.. _quale_ tipo di ricerca faccia 
dipende dall'implementazione. se usi gcc o mingw puoi dare un occhio a 
come è implementata
template<
     typename _Key
   , typename _Val
   , typename _KeyOfValue
   , typename _Compare
   , typename _Alloc
   >
typename _Rb_tree<_Key,_Val,_KeyOfValue,_Compare,_Alloc>::iterator
_Rb_tree<_Key,_Val,_KeyOfValue,_Compare,_Alloc>::find(const _Key& __k);
in stl_tree.h
-- 
sbi

 [CUT]
Se non sbaglio, pero', lo standard non dice se internamente sia un 
red-black tree o altro, no?
-- 
Mat/tia Belletti - Undergraduate student @ 
cs.unibo.it
ICQ: 33292311    - email: 
mbel...@cs.unibo.it
IRC: RedGlow     - site(s): 
http://mbellett.web.cs.unibo.it/
Jabber: RedGlow  - Linux registered user 299762 @ machine 213003

 red-black tree o altro, no?
non sbagli, non lo dice, qualche implementazione usa avl trees
-- 
sbi