Boost multi Index



  • Hallo,
    ich habe mir bisher einen Container geschrieben in dem ich drei Interger werte ablege.

    Das füllen funktiononiert soweit nun wie kann ich die daten wieder auslesen??

    Hier der Code:

    Erstellen des Container

    struct grPer 
    	{ 
    		int no, data, data2 ;
    
    		grPer(int n, int s, int d) 
    		: no(n), data(s), data2 (d) 
    		{ 
    		} 
    	};
    
    	typedef boost::multi_index::multi_index_container<
    		grPer,boost::multi_index::indexed_by<
    
    		boost::multi_index::hashed_unique<
    				boost::multi_index::member< 
    					grPer, int, &grPer::no 
    				> 
    			>, 
    
    			boost::multi_index::hashed_non_unique< 
    				boost::multi_index::member< 
    					grPer, int, &grPer::data 
    				> 
    			>,
    
    			boost::multi_index::hashed_non_unique<
    				boost::multi_index::member<
    					grPer, int, &grPer::data2
    				>
    			>
    		>
    	>mp_per;
    

    n * Füllen

    ...
    mp_per test;
    test.insert(grPer(1,5,7));
    ...
    

    Nun will ich in den Datensätzen z.b. nach allen elementen mit data == 5 suchen und die zugehörigen werte von No ausgeben.

    Also quasi über alle element iterieren. so in der art.

    for ( mp_per::iterator it = test.begin(); it != test.end(); it++)
    
    	{
    
    	}
    

    Ich weiß nur nicht wie ich an die 5 bzw. an die anderen elemente kommen soll?
    Die einschlägigen seiten wie boost.org und highscore.de hab ich schon durch. Komme damit aber nicht wirklich vorwärts.

    Ok vllt anders ausgedrück ich will eine drei elementriege struktur in einer Hashmap ablegen, dann durchsuchen und einzelen attribute von elementen ausgeben. (mit boost)



  • so ich hab jetzt was geändert und bin etwas weiter.

    Jetzt hab nur ein problem it->data ist immer leer. Ich will in der If schleife seine value() (wie bei listen) vergleichen.

    Hier der Code:

    struct grPer 
    	{ 
    		int no, data, data2;
    
    		grPer(int n, int s, int d) 
    		: no(n), data(s), data2 (d) 
    		{ 
    		} 
    	};
    
    	typedef boost::multi_index::multi_index_container<
    		grPer,boost::multi_index::indexed_by<
    		boost::multi_index::sequenced<>, 	
    		boost::multi_index::ordered_unique<
    				boost::multi_index::member< 
    					grPer, int, &grPer::no 
    				> 
    			>/*, 
    
    			boost::multi_index::ordered_non_unique< 
    				boost::multi_index::member< 
    					grPer, int, &grPer::data 
    				> 
    			>,
    
    			boost::multi_index::ordered_non_unique<
    				boost::multi_index::member<
    					grPer, int, &grPer::data2
    				>
    			>*/
    		>
    	>mp_per;
    

    füllen in einer Funktion

    mp_per test;
    test.push_back(grPer(i_no,i_data,i_data2));
    

    Hier liegt das problem!

    for ( mp_per::iterator it = test.begin(); it != test.end(); it++)
    
    	{		
                    // ID wird der funktion am anfang übergeben ist ein normaler int		
                    if (it->data == ID)
    		{
    			...
                                ...
    		}
    

    Mein Problem ist it->data ist immer leer !!
    Wieso?? außerdem weiß ich nicht wie ich mir den inhalt von it im Debugger von VS anschauen kann, also die totalen werte (no,dataund data2 wo er gerade dran ist).

    Hoffentlich kann mir nun jemand helfen


Anmelden zum Antworten