Il predicato deve prendere due parametri e restituire bool.
Poiché la funzione è una funzione membro ha la firma sbagliata.
Inoltre, potrebbe essere necessario essere in grado di confrontare il valore in int, valore in valore, int in valore e int in int utilizzando il proprio functor.
struct CompareValueAndTime
{
bool operator()(const Value& v, int time) const
{
return v.time < time;
}
bool operator()(const Value& v1, const Value& v2) const
{
return v1.time < v2.time;
}
bool operator()(int time1, int time2) const
{
return time1 < time2;
}
bool operator()(int time, const Value& v) const
{
return time < v.time;
}
};
Questo è piuttosto ingombrante, quindi cerchiamo di ridurlo:
struct CompareValueAndTime
{
int asTime(const Value& v) const // or static
{
return v.time;
}
int asTime(int t) const // or static
{
return t;
}
template< typename T1, typename T2 >
bool operator()(T1 const& t1, T2 const& t2) const
{
return asTime(t1) < asTime(t2);
}
};
quindi:
std::lower_bound(valueContainer.begin(), valueContainer.end(), time,
CompareValueAndTime());
Ci sono un paio di altri errori anche, ad esempio nessun punto e virgola alla fine della dichiarazione della classe, oltre al fatto che i membri di una classe sono privati per impostazione predefinita, il che rende l'intera classe privata in questo caso. Ti sei perso un public:
prima del costruttore?
La funzione GetLocationForTime non restituisce un valore. È necessario prendere il risultato di lower_bound e sottrarre begin() da esso. La funzione dovrebbe anche essere const.
Se l'intenzione di questa chiamata è quella di inserire qui, considerare il fatto che l'inserimento nel mezzo di un vettore è un'operazione O (N) e quindi il vettore potrebbe essere il tipo di raccolta errato.
Si noti che l'algoritmo lower_bound
funziona solo su raccolte preordinate. Se si vuole essere in grado di cercare su diversi membri, senza ricorrere continuamente, si vuole creare indici su questi campi, eventualmente utilizzando di spinta multi_index
Non ottengo tutti questi voti per chiudere, non c'è niente di sbagliato in questa domanda. Ci sono cose che non vanno nel codice ma questo lo rende una domanda valida. – CashCow
@CashCow - Sono completamente d'accordo. Il difetto quasi fatale di StackOverflow, secondo me, è l'attività di elettori stretti e troppo zelanti. Con l'aumentare dell'utenza di SO, il numero di voti stretti richiesti non * aumenta * e gli elettori chiudi sono più attivi di un ordine o di ordini di grandezza di quelli che riaprono gli elettori, causando questo problema. –
Se il problema è che sta avendo errori nel compilatore, dovrebbe dirci cosa sono. Se vediamo gli errori, possiamo pubblicare immediatamente una risposta. Senza gli errori dobbiamo passare attraverso il lavoro aggiuntivo di compilarlo da soli, il che ci fa non voler rispondere, il che rende questa una brutta domanda. –