Ho std::multimap<string, MyObject*> dataMap;
dove le chiavi sono MyObject.name
e tutti i MyObjects sono memorizzati in un std::vector<MyObject>
.Come eseguire un'iterazione attraverso una multimappa e stampare i valori raggruppati per chiave?
Dopo aver riempito la mappa, devo stampare il contenuto di dataMap
raggruppato dalla stessa chiave, in cui prima ho bisogno del numero delle stesse chiavi con l'aiuto di dataMap.count(MyObject.name)
e quindi tutti i valori con questa chiave.
Stavo pensando di utilizzare due for loops
dove i primi itera Loop Through "i nomi dei gruppi chiave" e conta tutte le chiavi che appartengono a questo gruppo, e le altre for loop
scorre tutte le chiavi in certo gruppo e stampa i MyObject.information
for(//iterate through group key names){
//print number of key occurences
for(//iterate through a certain group{
//print MyObject.information for all the keys in a group
}
}
Il problema è che non so davvero come implementare questo o piuttosto come userò gli iteratori alla mia volontà. Qualche idea?
EDIT: dai link forniti Ho creato questo
for(std::multimap<string, MyObject*>::const_iterator itUnq = dataMap.cbegin();
itUnq != dataMap.cend(); itUnq = dataMap.upper_bound(itUnq->first)){
std::cout << dataMap.count(itUnq->second->name)
<< std::endl;
std::pair <std::multimap<string, MyObject*>::const_iterator,
std::multimap<string, MyObject*>::const_iterator> groupRange;
groupRange = dataMap.equal_range(itUnq->second->code);
//iterate through keys inside the group
for(std::multimap<string, MyObject*>::const_iterator itGroup = groupRange.first;
itGroup != groupRange.second; ++itGroup){
std::cout << itGroup->second->information
}
Commenti?
Che cosa significa "tutti i MyObject sono memorizzati in un file std :: vector"? Hai anche detto che le chiavi 'dataMap' erano' * MyObject' 0 u.e. solo un puntatore a MyObject ... e una potenziale perdita di memoria, giusto? –
doctorlove
Significa che quando sto riempiendo la mappa sta leggendo dal vettore dove la chiave è 'MyObject.name' e il valore è l'oggetto stesso. Ho usato un puntatore per evitare di copiare l'oggetto – TheGuyWithStreetCred
Forse guardate [std :: multimap :: equal_range] (http://www.cplusplus.com/reference/map/multimap/equal_range/). – Galik