• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

wyszukiwanie binarne

+1 głos
367 wizyt
pytanie zadane 14 lutego 2016 w C i C++ przez marekl91 Początkujący (380 p.)
Czy można za pomocą algorytmu wyszukiwania binarnego wyszukiwać zmienną typu string w tablicy obiektów?

Algorytmy wyszukujące zajmują się liczbami, więc czy trzeba zamienić stringa np na inta?

1 odpowiedź

+3 głosów
odpowiedź 14 lutego 2016 przez mariush Dyskutant (7,860 p.)

Tak, można.

Algorytm binary_search przeszukuje posortowany kontener porównując obiekty za pomocą operatora <, którym bez problemu można porównać 2 stringi.

vector<string> vecOfStr{"adam", "ewa", "zbigniew", "stonoga"};
//sortowanie
sort(vecOfStr.begin(), vecOfStr.end());
//wyszukiwanie binarne
bool found = binary_search(vecOfStr.begin(), vecOfStr.end(), "ewa");
//wyświetlenie czy znaleziono
cout << (found?"znaleziono":"nie znaleziono") << endl;

 

komentarz 15 lutego 2016 przez marekl91 Początkujący (380 p.)
Ok, a czy da się posortować tablicę obiektów według zmiennej?  

Chodzi mi o to, że każdy obiekt w tablicy ma swoje imię i jest to określone wskaźnikiem

przykład:   tablica_pies[licznik_pies] -> imie;

Chcę posortować te obiekty tak, żeby występowały w kolejności alfabetycznej względem zmiennej imie.

Czy da się to zrobić?
komentarz 15 lutego 2016 przez mariush Dyskutant (7,860 p.)
edycja 15 lutego 2016 przez mariush

Rozumiem, że masz klase Pies i chcesz posortować tablice obiektów Pies alfabetycznie względem imienia, tak? W takim wypadku żeby móc korzystać z funkcji sort z <algorithm>, musisz przeciążyć operator < w klasie Pies, lub napisać własny predykat porównujący 2 psy.

W klasie Pies przeciążasz operator <

bool operator<(const Pies& other) const {
        return m_imie < other.imie();
}

I sortowanie następuje poprzez wywołanie funkcji

sort(początek_zakresu, koniec_zakresu);

W przypadku używania predykatu, jako trzeci argument funkcji sort podajesz jego nazwę. Przykładowy predykat do sortowania psów alfabetycznie względem imienia:

bool compare(const Pies& p1, const Pies& p2)
{
    return p1.imie() < p2.imie();
}

I sortujesz:

sort(początek_zakresu, koniec_zakresu, compare);

 

Podobne pytania

0 głosów
2 odpowiedzi 674 wizyt
0 głosów
1 odpowiedź 168 wizyt
pytanie zadane 23 października 2016 w C i C++ przez maste2 Nowicjusz (160 p.)
0 głosów
1 odpowiedź 383 wizyt
pytanie zadane 10 czerwca 2016 w Java przez uczeń1998 Obywatel (1,930 p.)

93,600 zapytań

142,524 odpowiedzi

322,993 komentarzy

63,085 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...