Hvordan bruke funksjonspekere i en binær Søk Argument i C ++

Hvordan bruke funksjonspekere i en binær Søk Argument i C ++


C ++ Standard Library algoritme bibliotek inneholder implementeringer av mange vanlige programmering algoritmer. Disse implementeringer tilbyr et utvalg av fleksibilitet, slik at programmereren å spesifisere sammenligning funksjoner for sammenligning baserte algoritmer som kan jobbe med alle datastruktur tenkelig. Legge til en sammenligning funksjon til en binær søk ved hjelp av funksjonspekere lar programmereren å dra nytte av denne fleksibiliteten, og sørger for at alle objekter opprettet av programmerer kan søkes med standard bibliotek.

Bruksanvisning

1 Sorter listen over objekter som skal søkes i. Et binært søk avhenger av en sortert liste er til stede. Bruk standard bibliotekets slags funksjon for å forenkle denne prosessen ved bruk av standard bibliotek containere:

std :: sort (myList.begin (); myList.end ());

2 Lag din sammenligning funksjon for Binærsøk. Sammenligningsfunksjonen må returnere sann dersom den første argumentet er mindre enn den andre. Tilpass denne funksjonen til å akseptere argumentene til din angitte klassen, og sørge for at klassen i spørsmålet implementerer mindre enn ( "<") operatør:

bool MyComparison (MyType i, MyType j)

{

return (i&lt;j);

}

3 Oppgi din sammenligning funksjon som et argument til standard bibliotekets binære søkefunksjon:

binary_search (myList.begin (), myList.end (), MyComparison);

Denne funksjonen vil nå bruke din sammenligning funksjonen til å utføre den binære søk.

Hint

  • Bruk klassen maler for å lage en generisk sammenligning funksjon. Denne funksjonen kan da gjenbrukes på tvers av flere objekter uten å bli re-implementert. Videre kan mal spesialisering aktiver polymorfisme med søketyper, noe som åpner for ytterligere fleksibilitet i programmet data design.
  • Objektene som utgjør listen må ha mindre enn operatør definert for denne implementeringen til funksjonen. Endre sammenligning funksjonen til å bruke andre tilgjengelige funksjoner for objektene hvis du ikke kan implementere denne operatøren.