|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jul 2002
Messaggi: 869
|
[C++] Ricerca binaria su vettore di puntatori a struct
Salve a tutti.
Come da titolo avrei bisogno di implementare una ricerca binaria (che restituisce un iteratore e non un valore bool) per un vettori di puntatori a struttura (dichiarato come std::vector<datiArco*> vetArchi; ). La struttura dati è la seguente: Codice:
struct datiArco{
int da;
int a;
std::vector<int> colori;
bool operator<(const datiArco &other) const {
if(this->da == other.da) return this->a < other.a;
else return this->da < other.da;
}
bool operator==(const datiArco &other) const {
return ((this->da == other.da) && (this->a == other.a));
}
};
static bool comparePtrToArc(const datiArco* ptr1, const datiArco* ptr2) {
if(ptr1->da == ptr2->da) return (ptr1->a < ptr2->a);
else return (ptr1->da < ptr2->da);
}
Codice:
datiArco arcoTmp; arcoTmp.da = i; arcoTmp.a = j; std::vector<datiArco*>::iterator itArco = std::lower_bound(getVetArchi().begin(), getVetArchi().end(), &arcoTmp,comparePtrToArc);
__________________
Notebook: MBP 15 i7 Retina, (Mid 2014) |
|
|
|
|
|
#2 |
|
Bannato
Iscritto dal: Nov 2014
Messaggi: 292
|
Tre osservazioni:
|
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Jul 2002
Messaggi: 869
|
Quote:
1. La funzione getVetArchi() è la seguente: Codice:
std::vector<datiArco*> getVetArchi() const {
return vetArchi;
}
Nel primo post non avevo indicato questo dettaglio per non complicare la descrizione del problema ma la chiamate reale nel mio codice è: Codice:
std::vector<datiArco*>::iterator itArco = std::lower_bound(p->getVetArchi().begin(), p->getVetArchi().end(), &arcoTmp,comparePtrToArc); 2. Giusto, eliminerò la funzione inutile. 3. Purtroppo è proprio quello il problema. Tutta la questione nasce dalla necessità di avere l'iteratore o l'indice dell'elemento nell'array, non mi basta sapere se l'elemento è presente o meno.
__________________
Notebook: MBP 15 i7 Retina, (Mid 2014) |
|
|
|
|
|
|
#4 | |
|
Bannato
Iscritto dal: Nov 2014
Messaggi: 292
|
Quote:
Prova così: Codice:
std::vector<datiArco*> vetArchi = p->getVetArchi(); std::vector<datiArco*>::iterator itArco = std::lower_bound(vetArchi.begin(), vetArchi.end(), &arcoTmp,comparePtrToArc); |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 09:14.




















