geziehlt Werte aus einer std::map lesen?



  • Hallo Gemeinde

    ich habe eine map der Form

    map<time_t, vector<float>>
    

    darin sind z.T. mehr als 100000 Werte mit denen ein ListCtrl bediene. Gibt es einen schnelleren Weg als jedes mal die map komplett duch zu iterieren um die 10 gerade anzuzeigenden Werte zu finden oder ist es besser die Wertepaare in einen Vector zu verpacken?



  • Benutze erstmal eine virtual listctrl. Bei codeproject findest du ein Beispiel.



  • Danke, genau das mache ich bereits und die Ladezeit des ListCtrl hat sich damit drastisch verkürzt. Doch beim scrollen durch die Liste muss GetDispInfo die Daten für die anzuzeigenden Daten suchen.



  • Ich hab das mit einem std::vector für die Daten gemacht und selbst mit verschiedenen Suchkriterien und Daten > 100000 geht es recht flott.
    Hab dann die Suchfunktion in einen eigenen thread ausgelagert um eine Rückmeldung zu bekommen. Fortschrit anzeigen und sowas.

    Du musst dann evtl. noch so Sachen implementieren wie:

    afx_msg void OnLvnGetdispinfo(NMHDR *pNMHDR, LRESULT *pResult);
    	afx_msg void OnLvnItemchanged(NMHDR *pNMHDR, LRESULT *pResult);
    	afx_msg void OnLvnOdstatechanged(NMHDR *pNMHDR, LRESULT *pResult);
    	afx_msg void OnNMDblclk(NMHDR *pNMHDR, LRESULT *pResult);
    	afx_msg void OnLvnColumnclick(NMHDR *pNMHDR, LRESULT *pResult);
    
    	LRESULT OnThreadStart(WPARAM, LPARAM);
    	LRESULT OnThreadClose(WPARAM, LPARAM);
    	LRESULT OnThreadIdle(WPARAM, LPARAM lParam);
    


  • OK, Danke dann ist die Richtung klar. Die Datenhaltung umzustellen, ist halt ein Tag Arbeit - geht schon.


Log in to reply