04. oktober 2005 - 11:57Der er
18 kommentarer og 1 løsning
Der bliver aldrig indsat mere end en entry
Hej,
Jeg har en map hvor jeg forsøger at indsætte nogle data i.
Min map indeholder følgende data: map<char *,Item *> mymap;
Og jeg indsætter dem ved: Item *i = new Item("navn","data"); mymap.insert(std::make_pair(i->getName(),i));
Problemet ligger nu at jeg aldrig for indsat mere end en entry i mappen. (Du skal ikke bekymre dig om eventuelle små programmeringsfejl i ovenstående kode - det er et pricippet i det!)
Det ved jeg faktis godt - og egentlig er det også sådan at dette navn ændre sig i koden. Men jeg tror måske alligevel du har fak i noget af det rigtig. Jeg giver en pointer med - hvis denne pointer ikke ændrer sig, så opstår samme problem vel?
Hvis vi nu siger at jeg modtager de to paramtre fra cin, hvordan giver man dem så med som parametre til Item-construktoren, sådan er det bliver kopieret derover i, også addressen ikke er den samme?
Men der er mange gode grunde til at lade være. For at det skal kunne virke skal du sikre dig at pointeren peger på det samme i al den tid et elementet eksisterer i map'en. Hvis der kun bliver indsat ét element i din map'e nu, er der ingen grund til at tro at det vil virke blot ved at tilføje en comperator.
bertelbrander > jamen jeg har sådan set fået det til at virke med "char *" - problemet er bare at addresse på "char *" ikke ændre sig når jeg giver den med til objektet. Så næste gang jeg opretter en objekt er adressen den samme, og derfor bliver der ikke lagt flere entries ind i min map.
Hvis du vil bruge en char * bør du new'e (eller malloc) plads til strengen når du putter i map'en, og så delete (eller free) den når du sletter elementet i map'en.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.