Generic BST

Tags:    c#

<< < 12 > >>
Hej Udviklere,

Vi har haft om binære søge træer på studiet nu her og jeg synes det går fint. Nu sidder jeg så og tænker på at lave denne generisk. Jeg kan ikke se nogle problemer ved de primitive data typer når jeg skal finde ud af hvilken side af træet de skal være på. Men hvad gør jeg ved objekter? Jeg kan ikke umiddelbar selv se nogen let løsning på dette.

På forhånd tak.



Indlæg senest redigeret d. 23.04.2010 18:37 af Bruger #6559
14 svar postet i denne tråd vises herunder
2 indlæg har modtaget i alt 3 karma
Sorter efter stemmer Sorter efter dato
Sådan her kan din node se ud.
Fold kodeboks ind/udKode 


Eksempel på en vare klasse kunne være
Fold kodeboks ind/udKode 




Indlæg senest redigeret d. 24.04.2010 18:31 af Bruger #15851
Det kan løses ved, at objekterne implements IComparable.



Kan jeg så vælge hvis det er en vare klasse, at den skal sorteres på prisen og hvis det er en kunde klasse er det kundenr.?

(Det er mere om det er så flexibelt for jeg kender godt IComparable).



Hvis du implementere IComparable på din vare-klasse skal du jo netop selv skrive CompareTo logikken, her kan du så bare vælge at sammenligne prisen på varen, og returnere resultatet



Min node klasse ser sådan ud indtil videre:

Fold kodeboks ind/udCSharp kode 


Den siger: Operator '<' cannot be applied to operands of Type and Type.



prøv class TreeNode<Type> where Type: IComparable<Type>

Og så implementer CompareTo som interfacet foreskriver

Dette sikre at data i dine nodes kun kan indeholde objekter som implementere IComparable (CompareTo)



Indlæg senest redigeret d. 23.04.2010 22:25 af Bruger #15851
Jeg har heller ikke kunnet få det til at virke at lave det på den måde, men jeg har løst det på en anden måde (ser ud til at virke). Det er ved at gøre den indkommende data til IComparable istedet for Type. Og så har jeg helt undgået at bruge type som normal generisk.

Fold kodeboks ind/udCSharp kode 




Men så er dit BST jo netop ikke generisk :)



Men som sagt, den vil ikke sammenligne de to typer når jeg indsætter et nyt element i den øverste kode.



Hvis det er denne fejl:
Operator '<' cannot be applied to operands of Type and Type.

Er dit problem højest sandsynligt at du forsøger at sammenligne med < > operatorene du skal bruge CompareTo, ellers skal du igang med at kigge på operator overloading



<< < 12 > >>
t