/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
list::sort
Fra : Socketd


Dato : 05-08-03 11:54

Hi

Jeg har en klasse Ordre og i den:
friend bool OrdreSpace:erator<(const Ordre &o1, const Ordre &o2);

Det er så meningen at jeg kan lave en:
list<Ordre *> og bruge list::sort til at sortere listen. Problemet er at
ovenstående funktion aldrig bliver kaldt. Jeg har også prøvet at lave
det om til:
friend bool OrdreSpace:erator<(const Ordre *o1, const Ordre *o2);
Meeeen det var g++ ikke så glad for.

Any help? (vil helst have det sådan at du kalder list::sort, uden at
angive en bestemt funktion den skal bruge)

mvh
socketd

 
 
Ivan Johansen (05-08-2003)
Kommentar
Fra : Ivan Johansen


Dato : 05-08-03 12:47

Socketd wrote:
> Jeg har en klasse Ordre og i den:
> friend bool OrdreSpace:erator<(const Ordre &o1, const Ordre &o2);
>
> Det er så meningen at jeg kan lave en:
> list<Ordre *> og bruge list::sort til at sortere listen. Problemet er at
> ovenstående funktion aldrig bliver kaldt. Jeg har også prøvet at lave
> det om til:
> friend bool OrdreSpace:erator<(const Ordre *o1, const Ordre *o2);
> Meeeen det var g++ ikke så glad for.
>
> Any help? (vil helst have det sådan at du kalder list::sort, uden at
> angive en bestemt funktion den skal bruge)

Dit ønske kan ikke opfyldes. Du vil sortere pointere, men operator< kan
ikke overloades for pointere. Du bliver derfor nødt til at specificere
en funktion eller et objekt der kan bestemme hvad der er mindst.

Måske du skulle overveje om det virkelig er list<Ordre*> og ikke
list<Ordre> du har brug for.

Ivan Johansen


Ulrik Jensen (05-08-2003)
Kommentar
Fra : Ulrik Jensen


Dato : 05-08-03 15:50

Hej

Ivan Johansen <NG2@Padowan.dk> writes:
> Dit ønske kan ikke opfyldes. Du vil sortere pointere, men operator<
> kan ikke overloades for pointere. Du bliver derfor nødt til at
> specificere en funktion eller et objekt der kan bestemme hvad der er
> mindst.

Hmm, er du helt sikker? Jeg føler mig overbevist om at jeg havde en
lignende situation for ikke så længe siden, hvor jeg brugte pointere,
og hvor jeg i stedet for at definere operatoren som et member for den
klasse pointerne pegede på, definerede jeg den udenfor, som følger:

class Word {
...
};

bool operator < (Word *, Word *)
{
...
}

Og jeg mener da det virkede ganske fortrinligt (med std::sort).. Den del
af koden er dog refactored væk, og jeg har ikke gemt det, så jeg skal
ikke kunne gå tilbage og tjekke. Dårlig vane jeg har, egentlig :)

--
Ulrik Jensen
ulrik@qcom.dk - http://www.terryp.tk
"It's only a movie, and, after all, we're all grossly overpaid."

Ivan Johansen (05-08-2003)
Kommentar
Fra : Ivan Johansen


Dato : 05-08-03 18:01

Ulrik Jensen wrote:
> bool operator < (Word *, Word *)
> {
> ...
> }

Det burde ikke virke da operator< i forvejen er defineret for pointere.
På samme måde duer følgende heller ikke:
bool operator<(int a, int b)
{
}

Ivan Johansen


Socketd (05-08-2003)
Kommentar
Fra : Socketd


Dato : 05-08-03 13:00

On Tue, 05 Aug 2003 13:46:41 +0200
Ivan Johansen <NG2@Padowan.dk> wrote:

> Dit ønske kan ikke opfyldes. Du vil sortere pointere, men operator<
> kan ikke overloades for pointere. Du bliver derfor nødt til at
> specificere en funktion eller et objekt der kan bestemme hvad der er
> mindst.
>
> Måske du skulle overveje om det virkelig er list<Ordre*> og ikke
> list<Ordre> du har brug for.

Ok, så må jeg jo angive en funktion, takker for hjælpen

mvh
socketd

Socketd (05-08-2003)
Kommentar
Fra : Socketd


Dato : 05-08-03 16:18

On Tue, 05 Aug 2003 16:49:57 +0200
Ulrik Jensen <ulrik@qcom.dk> wrote:

> Og jeg mener da det virkede ganske fortrinligt (med std::sort).. Den
> del af koden er dog refactored væk, og jeg har ikke gemt det, så jeg
> skal ikke kunne gå tilbage og tjekke. Dårlig vane jeg har, egentlig :)

CVS - For a better world

mvh
socketd

Søg
Reklame
Statistik
Spørgsmål : 177580
Tips : 31968
Nyheder : 719565
Indlæg : 6409081
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste