Unklarheiten mit der Verwendung on CTypedPtrMap



  • Guten Morgen zusammen.

    Um Ids in einer .csv zu vergleichen will ich die ids in eine map schreiben.
    Bisher habe ich mit getline alle zeilen ausgelesen und mit der vorhanden id abgeglichen...mit der verwendung von hashes ginge das natürlich deuutlich schneller...leiderist mir die Vewrwendung/Vorgang der Klasse CTypedPtrMap nicht klar.

    Die Dokumentierung der msdn ist mir mit meinem wissensstand da irgendwie zu spärlich.

    Die Ids liegen in einem char vor.

    beispiel code:

    CTypedPtrMap<CMapStringToPtr,char,int>MyMap;
    
    char ID[32]="19AE3H"
    

    wie gehts nun weiter?

    MyMap.HashKey(ID);
    

    ..generiert schön die Hashcode, schoen und gut, diese sollen nun aber ja in die map?

    wie gehts jetzt weiter?

    -> hashcodes der id in map schreiben
    -> später schauen ob id in map schon steht: lookup....

    Grüße Jan


  • Mod

    Ein char ist kein char[] und schon gar kein CString.
    Wenn der Schlüssel ein String ist und auch nihct als Zeiger-Wert verwendet werden soll musst Du es so machen:

    CTypedPtrMap<CMapStringToPtr,CString,int> MyMap;
    TCHAR ID[]="19AE3H";
    MyMap[ID] = 5;
    


  • Viele Dank für die Korrektur.

    ...die Verwendung von Lookup ist mir jedoch immer noch nicht klar,
    vor allem:

    BOOL Lookup( LPCTSTR  key  , void*&  rValue  ) const;  
    
    rValue: Specifies the returned value from the looked-up element.
    
    MyMap[ID1]=HashKey(ID1);
    
    x=MyMap.Lookup(ID1,(was wird wie gecastet?)
    

    ...in das Lookup "hau" ich den String rein, Lookup generiert den hashcode, und prüft ob dieser schon vorhanden ist.
    Der return wert sagt mir dann, ob die ID schon in der map ist oder nicht.
    Richtig?

    edit:

    int x1=0;
    int x2=0;
    int y=0;
    
    char ID1[]="19AE3H";
    char ID2[]="19AE3H2";
    
    MyMap[ID1]=HashKey(ID1);
    
    x1=MyMap.Lookup(ID1,y); //bekomme fuer x1=1
    x2MyMap.Lookup(ID1,y); //hier x2=0
    

    jedoch bin ich mir mit der verwendung des 2ten parameters von lookup noch unsicher.


  • Mod

    Da wird nichts gecastet. Wie kommst Du auf einen cast?

    int x;
    if (MyMap.Lookup(ID1,x))
    // Gefunden
       ...;
    else
    // Nix gefunden
        ...;
    

    Warum schaust Du Dir nicht das COLLECT Sample an?
    Das gibts doch in der MSDN...
    http://msdn.microsoft.com/en-us/library/fw2702d6(VS.80).aspx



  • Ja, habs selber rausgefunden, siehe edit.

    Vielen lieben Dank.


Anmelden zum Antworten