pekfos |
» 2016-01-30 18:53:34 Po pierwsze: std::binary_search(), a nie std::lower_bound(). I jak szukasz obiektu Slownik, to chcesz też znaleźć Slownik, a nie std::string. Do tego predykat powinien przyjmować referencje. |
|
hit Temat założony przez niniejszego użytkownika |
» 2016-01-30 19:02:16 Ale z tego co wyczytałem to binary_search zwraca informację czy istnieje taki obiekt, to jak potem będę mógł pobrać jego wartości? Rozumiem, że ten string dotyczy klasa[ i ].nazwisko, ale w takim razie dalej nie rozumiem skąd ma być wiadomo, który obiekt ma być wyszukany. |
|
pekfos |
» 2016-01-30 19:33:45 Ale z tego co wyczytałem to binary_search zwraca informację czy istnieje taki obiekt, to jak potem będę mógł pobrać jego wartości? |
A, fakt. lower_bound() + dodatkowe sprawdzenie, czy znaleziony element jest równy szukanemu, bo nie musi być. Rozumiem, że ten string dotyczy klasa[ i ].nazwisko, ale w takim razie dalej nie rozumiem skąd ma być wiadomo, który obiekt ma być wyszukany. |
Taki, jaki przekażesz w 3. argumencie, ale musi być typu Slownik. |
|
j23 |
» 2016-01-30 21:59:29 @hit, mam nadzieję, że masz świadomość tego, że std::lower_bound wyszukuje tylko w posortowanych zbiorach. Jeśli chcesz wyszukać nazwiska, zbiór musi być posortowany według nazwisk. Inaczej będzie dupa. |
|
hit Temat założony przez niniejszego użytkownika |
» 2016-01-31 00:14:03 @pekfos a to sprawdzenie jak miałoby wyglądać skoro nie wiem czego konkretnie szukam, poza jedną wartością obiektu? Po tej jednej wartości?
@j23 tak, wiem że zbiór musi być posortowany :) dzięki. |
|
pekfos |
» 2016-01-31 10:28:23 a to sprawdzenie jak miałoby wyglądać skoro nie wiem czego konkretnie szukam, poza jedną wartością obiektu? Po tej jednej wartości? |
W którym momencie się zgubiłeś, skoro nie wiesz już nawet, czego szukasz? Funkcja zwróci ci jakiś wynik, który może być równy szukanej wartości lub nie, jeśli szukanej wartości nie ma w wektorze. Skoro szukasz konkretnej wartości, to sprawdź, czy ta wartość jest równa tej z wyniku. |
|
hit Temat założony przez niniejszego użytkownika |
» 2016-01-31 10:34:46 Zgubiłem się mniej więcej przy wywołaniu std::lower_bound. Załóżmy, że mam jakiś obiekt w słowniku, którego wartość w polu nazwisko jest równa szukanej przeze mnie wartości. Wtedy szukając go w jaki sposób mam przekazać konkretnie to nazwisko, skoro nie ma to być string tylko cały obiekt Slownik? (Zakładam, że sortowanie jest w porządku) Co do tego, że "nie wiem czego konkretnie szukam" chodzi mi o to, że znam tylko wartość jednego pola tego obiektu, a reszty nie i dlatego chcę te pozostałe wartości znaleźć. Co powinienem tu zatem zmienić, żeby przekazywać tą wartość nazwisko i zwracało mi prawidłowy obiekt? itSlow = lower_bound( slownik.begin(), slownik.end(), klasa[ i ].nazwisko, sortSlownik ); Założenie tego słownika jest takie, że zawsze powinien znaleźć tą wartość więc sprawdzenie czy obiekt jest równy szukanemu chyba nie jest konieczne. Edit: Czy powinien to być utworzony obiekt, który ma wypełniony tylko tą jedną wartość? |
|
j23 |
» 2016-01-31 10:46:57 Wtedy szukając go w jaki sposób mam przekazać konkretnie to nazwisko, skoro nie ma to być string tylko cały obiekt Slownik? |
Tak: Slownik s;
s.nazwisko = klasa[ i ].nazwisko;
itSlow = lower_bound( slownik.begin(), slownik.end(), s, sortSlownik ); |
|
1 2 « 3 » 4 5 |