Kezdőoldal » Számítástechnika » Programozás » Hogyan szokás elegánsan...

Hogyan szokás elegánsan megoldani a halmazokat C++ -ban?

Figyelt kérdés
Ha valamiknek a halmazait szeretném, de a valamiknek van még sok más tulajdonsága is, amik azonban a halmazba sorolástól függetlenek. Például neveket szeretnék egy halmazba, de minden névhez rendelve van mondjuk életkor, súly, stb. Ezeket együtt érdemes egy osztályban kezelni, de viszont nem szeretném, hogy a halmazba bekerülhessen ugyanaz a név kétszer, csak eltérő életkorral. Elvileg az egyenlőséget átdefiniálhatnám, de arra valójában szükségem lehet. Vagy a mellékes adatokat máshogy kéne hozzárendelni?

2012. jún. 15. 13:01
 1/4 iostream ***** válasza:

Ugye most az std::set (std::unordered_set) használatáról beszélünk, nem valami otthon hegesztett halmazról?


Ha az ekvivalencia részbe beletartozik a többi adat is, akkor bizony kell a többi adat ellenőrzése is. Írsz egy operator<-t (set esetén) vagy operator==-t (unordered esetén), és úgy hozod létre a halmazt. A másik megoldás, ha nem akarod lekötni az operátort, akkor simán írsz egy összehasonlító függvényt, és azt is odaadod a halmaznak, fel vannak rá készítve, hogy másféleképpen legyenek hasonlítva az elemeik, mint a default.


[link]


explicit set ( const Compare& comp = Compare(),

const Allocator& = Allocator() );

2012. jún. 15. 13:08
Hasznos számodra ez a válasz?
 2/4 A kérdező kommentje:

Az ekvivalencia részbe pont hogy nem tartozik bele a többi adat. Alapból beletartozna, de az én problémámban nem. Egyébként köszi a választ, mert válaszoltál.


A másik megoldás, amin gondolkodtam az adat map-ként történő hozzárendelése.

2012. jún. 15. 15:30
 3/4 A kérdező kommentje:
És a "mutable" nem tudja megoldani a problémát, vagy az tök másra jó???
2012. jún. 15. 18:41
 4/4 iostream ***** válasza:

Hát a válaszom elég általános volt, tartalmazza azt az esetet is: írsz egy összehasonlító függvényt, ami azt hasonlítja össze, ami neked kell a halmazban az egyediségvizsgálathoz. És ezzel hozod létre a halmazt.


Itt egy példa (az Example résznél), hogy hogy kell saját összehasonlítót megadni:

[link]

2012. jún. 16. 07:50
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!