Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[STL] Przekazanie wektora wskaźników do funkcji.

Ostatnio zmodyfikowano 2016-01-31 20:03
Autor Wiadomość
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.
P-144207
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.
P-144209
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.
P-144214
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.
P-144219
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.
P-144226
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.
P-144233
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ść?
P-144234
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:
C/C++
Slownik s;

s.nazwisko = klasa[ i ].nazwisko;

itSlow = lower_bound( slownik.begin(), slownik.end(), s, sortSlownik );
P-144236
1 2 « 3 » 4 5
Poprzednia strona Strona 3 z 5 Następna strona