Klasa jako wartość

Awatar użytkownika
hubertwojtowicz
Użytkownik
Użytkownik
Posty: 269
Rejestracja: 29 wrz 2008, o 16:57
Płeć: Mężczyzna
Lokalizacja: Warszawa\Słupsk
Podziękował: 59 razy
Pomógł: 32 razy

Klasa jako wartość

Post autor: hubertwojtowicz »

Mam taką klasę:

Kod: Zaznacz cały

class para{
public:
   string a, b;
};
Wkładam obiekty klasy do

Kod: Zaznacz cały

set<para> Slownik;
I teraz chciałbym szukać w kontenerze Slownik wykonać wyszukiwanie po zmiennej 'a' z klasy 'para' w następujący sposób:

Kod: Zaznacz cały

set<para>::iterator it;
it = Slownik.find(jakis_string);
Ogólnie mój problem polega na tym, że dawno uczyłem się c++ i nie pamiętam co kiedyś dopisywałem, żeby obiekt klasy był widziany jako podstawowy typ zmiennej w tym wypadku zmienna string 'a'. Mam wątpliwości, czy sformułowałem dość jasno mój problem, ale inaczej nie potrafię mam nadzieję, że ktoś wie o co mi chodzi. Proszę o pomoc.

-- dzisiaj, o 23:21 --

Już wiem jak to inaczej sformułować. Chodzi mi o konwersję typu para do typu string. Jak tego dokonać?
Fingon
Użytkownik
Użytkownik
Posty: 222
Rejestracja: 24 sie 2009, o 02:21
Płeć: Mężczyzna
Lokalizacja: Katowice
Pomógł: 32 razy

Klasa jako wartość

Post autor: Fingon »

Tak chyba się nie da. Musisz odpowiednio przeciążyć, któryś z operatorów <, ==, nie jestem pewny który, ale najprawdopodobniej <. Następnie wywołaj find(obiekt_klasy), gdzie obiekt_klasy.a = jakiś_string.
Awatar użytkownika
argv
Użytkownik
Użytkownik
Posty: 569
Rejestracja: 27 maja 2009, o 01:27
Płeć: Mężczyzna
Podziękował: 51 razy
Pomógł: 66 razy

Klasa jako wartość

Post autor: argv »

Ekspertem od cpp nie jestem ale zrobiłbym to tak (jeśli koniecznie chcesz mieć set obiektów własnej klasy) - mniej więcej jak napisał Fingon:

Kod: Zaznacz cały

#include <iostream>#include <set>#define ILE_PAR     3using namespace std;class para {public:    string a, b;    para(string aa, string bb): a(aa), b(bb) { }};// porownywaczka do naszych par, porownuje po pierwszych elementach ktore// sa kluczamistruct porownaj {    bool operator() (const para &p1, const para &p2) {        return p1.a < p2.a;    }};// zbior par wraz z porownywaczkatypedef set<para,porownaj> SLOWNIK;typedef SLOWNIK::iterator SIT;int main(){    SLOWNIK s;    // tworzymy sobie przykladowe pary i wstawiamy do seta    para tab[ILE_PAR] = {para("ala", "kota"), para("ola", "psa"), para("marcin", "chomika")};    for(int i = 0; i < ILE_PAR; i++) {        s.insert(tab[i]);    }    // wyszukujemy po kluczu wzorca     para wzorzec("ala", "cosNieistotnego");    SIT it = s.find(wzorzec);    cout << (it != s.end() ? it->b : "Brak klucza") << endl;    system("PAUSE");    return 0;} 
Awatar użytkownika
hubertwojtowicz
Użytkownik
Użytkownik
Posty: 269
Rejestracja: 29 wrz 2008, o 16:57
Płeć: Mężczyzna
Lokalizacja: Warszawa\Słupsk
Podziękował: 59 razy
Pomógł: 32 razy

Klasa jako wartość

Post autor: hubertwojtowicz »

Dzięki za odpowiedź Jak przypomniało mi się o konwersjach, to zdobyłem Symfonię C++ J. Grębosza z kt. się kiedyś uczyłem i tam znalazłem coś takiego:

Kod: Zaznacz cały

class para{
public:
   string a, b;
   operator string(){return a;}
};
To w 4 linii robi wszystko co trzeba
ODPOWIEDZ