Avatar billede quiw Nybegynder
07. juli 2007 - 08:03 Der er 4 kommentarer og
1 løsning

Erase ved hjælp af map

Hejsa eksperter, jeg er ret irriteret over at jeg ikke kan fjerne information fra min map 100%, hvis mine pairs f.eks. ser sådan her ud:

char info[20]="test3";

test1 | 1
test2 | 2
test3 | 3
test4 | 4
test5 | 5

Og jeg skriver:
map.erase(info);

Så sletter den således:
test1 | 1
test2 | 2
test3 | "slettet"
test4 | 4
test5 | 5

men problemet er at jeg gerne vil have hele "posten" slettet, således:
test1 | 1
test2 | 2
"slettet" | "slettet"
test4 | 4
test5 | 5

- Altså, hvor alt det andet er bevaret, men den har slettet hele test3 og dens informationer, i dette tilfælde '3'
Avatar billede arne_v Ekspert
08. juli 2007 - 03:36 #1
Følgende virker fint hos mig:

#include <iostream>
#include <string>
#include <map>

using namespace std;

int main()
{
    map<string,int> m;
    m["a"] = 1;
    m["b"] = 2;
    m["c"] = 3;
    for(map<string,int>::iterator it=m.begin();it!=m.end();it++)
    {
        cout << it->first << " " << it->second << endl;
    }
    m.erase("b");
    for(map<string,int>::iterator it=m.begin();it!=m.end();it++)
    {
        cout << it->first << " " << it->second << endl;
    }
    return 0;
}
Avatar billede quiw Nybegynder
08. juli 2007 - 17:45 #2
Forstår ikke hvorfor mit ikke virker som det skal, altså, det er en chat som fungere således:
- Når man logger ind, bliver ens IP og socket sat som et par i mappet.

- Når man så skriver f.eks. /tell ip "besked", så bliver den socket fundet, som er sat sammen med ip, og der bliver sendt en besked til den socket.

- Hvis så at der kommer en fejl, f.eks. ved at skrive en forkert ip som ikke er online, får man en fejlbesked om at han ikke er online.

- Når man logger ud bliver ens ip slettet ved: map.erase(ip);

Det fungere i sig selv fint nok, men hvis brugeren logger ud, og ind igen, så vil han stå som offline fordi at den ikke har slettet ip helt, den har kun slettet indholdet af ip. altså sådan her:

IP  | socket
------------
ip1 | 1
ip2 | 2
ip3 | 3
ip4 | 4
ip5 | 5

bliver til:
IP  | socket
------------
ip1 | 1
ip2 | 2
ip3 | slettet
ip4 | 4
ip5 | 5

når han så logger ind igen, bliver hans IP tilføjet til mappet igen, men så er der 2 ens IP´er så kommer det til at se sådan her ud:
IP  | socket
------------
ip1 | 1
ip2 | 2
ip3 | slettet
ip4 | 4
ip5 | 5
ip3 | 6

- Dvs, at når den skal ind og finde socket ud fra ip, så finder den bare den første ip, og konkludere at den ip er tom, i stedet for at tage den ip i bunden, da de har samme navn. Hvis du kan følge mig?

Det burde i stedet se sådan her ud:

IP  | socket
------------
ip1 | 1
ip2 | 2
ip4 | 4
ip5 | 5
ip3 | 6

altså, den har slettet ip3 HELT fra listen, også når han kommer online igen laver den en ny .. I stedet for at blive forvirret når der er 2 ens ip´er
Avatar billede arne_v Ekspert
07. august 2007 - 22:18 #3
Kan du poste et kode eksempel, som kan genskabe fejlen ?
Avatar billede quiw Nybegynder
09. august 2007 - 15:59 #4
Jeg fandt egentlig en løsning, kan ikke lige huske hvordan, men du kan bare smide et svar :)
Avatar billede arne_v Ekspert
10. august 2007 - 02:11 #5
ok
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester