fracarro
30-08-2015, 16:10
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:
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);
}
La funzione comparePtrToArc serve per il sort del vettore (e fino qui tutto ok). Leggendo su internet mi sembra possibile implementare la ricerca binaria in c++ utilizzando la funzione lower_bound. Tuttavia quando invoco la funzione tramite il seguente comando:
datiArco arcoTmp;
arcoTmp.da = i;
arcoTmp.a = j;
std::vector<datiArco*>::iterator itArco = std::lower_bound(getVetArchi().begin(), getVetArchi().end(), &arcoTmp,comparePtrToArc);
ricevo sempre una segmentation fault proprio nella riga di invocazione della funzione lower_bound. So che utilizzare un vettore di puntatori non è consigliato ma non posso cambiare questa struttura. Qualche esperto di c++ può darmi qualche consiglio per individuare l'errore?
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:
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);
}
La funzione comparePtrToArc serve per il sort del vettore (e fino qui tutto ok). Leggendo su internet mi sembra possibile implementare la ricerca binaria in c++ utilizzando la funzione lower_bound. Tuttavia quando invoco la funzione tramite il seguente comando:
datiArco arcoTmp;
arcoTmp.da = i;
arcoTmp.a = j;
std::vector<datiArco*>::iterator itArco = std::lower_bound(getVetArchi().begin(), getVetArchi().end(), &arcoTmp,comparePtrToArc);
ricevo sempre una segmentation fault proprio nella riga di invocazione della funzione lower_bound. So che utilizzare un vettore di puntatori non è consigliato ma non posso cambiare questa struttura. Qualche esperto di c++ può darmi qualche consiglio per individuare l'errore?