2016-05-15 4 views
1

Ich habe die folgende Funktion durchlaufen:Der Iterator über die gesamte Karte nicht

void send_sequence_to_device(std::map<const string_t,device_t*> &msg2device_p, std::vector<response_t>& result_list, ushort num_attempts) 
    { 
     cout<<"sarit enter to send_seq_device"<<endl; 
     std::map<const string_t, device_t*>::iterator msg_itf; 
     for(msg_itf=msg2device_p.begin(); msg_itf!=msg2device_p.end(); msg_itf++) 
     { 
      cout<<"sarit enter to seq "<<msg_itf->first<<endl; 
     } 
    } 

ich durch eine andere Funktion diese Funktion aufrufen:

void node_layer_manager_t::calc_ts_job_function() 
    { 
     vector<response_t> res; 
     map<const string_t, device_t*> getRegMsg={{"get_node_ts_est",&tx},{"get_node_ts_est",&rx},{"get_tx_num_clk_ts",&tx}}; 
     cout<< "sarit ts clk function nlm first"<<endl; 
     send_sequence_to_device(getRegMsg,res); 
    } 

ich nur, dass die Schleife Iterierte sehen 2 statt 3. Die Ausgabe lautet:

sarit enter to seq get_node_ts_est 

sarit enter to get_tx_num_clk_ts 

Während ich für erwarten:

sarit enter to seq get_node_ts_est 

sarit enter to seq get_node_ts_est 

sarit enter to get_tx_num_clk_ts 
+0

Wo ist die Definition von 'setRegMsg' (was geben Sie an Ihre' send_sequence_to_device() 'Funktion)? – TypeIA

+0

Weißt du, was ['std :: multimap'] (http://en.cppreference.com/w/cpp/container/multimap) ist? –

Antwort

5

A std::map lässt keine doppelten Schlüssel zu.

Zwei Ihrer Werte haben denselben Schlüssel, daher wird nur einer von ihnen in die Karte aufgenommen.

Verwenden Sie std::multimap anstelle von std::map, wenn Sie doppelte Schlüssel benötigen.

Verwandte Themen