映射的迭代器不保存正确的值

The iterator of a map doesn't hold the correct value

本文关键字:迭代器 映射 保存      更新时间:2023-10-16

我有以下功能:

   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;
        }
    }

我用另一个函数调用这个函数:

void node_layer_manager_t::ts_clk_est_job_function(void)
{
    vector<response_t> res;
    map<const string_t, device_t*> setRegMsg={{"trx_set_jr_estim_fs_to_cnt "+NUM_FRAMES_TO_COUNT_IN_TS_CLK_EST,&trx},{"trx_set_jr_estim_fs_to_cnt "+NUM_FRAMES_TO_COUNT_IN_TS_CLK_EST,&trx}}, getRegMsg={{"trx_get_jr_estim_params",&trx},{"trx_get_jr_estim_params",&trx}};
    cout<< "sarit ts clk function nlm first"<<endl;
    send_sequence_to_device(setRegMsg,res);
}

NUM_FRAMES_TO_COUNT_IN_TS_CLK=3(定义)

例如,由于某些原因,对于第一对{"trx_set_jr_estim_fs_to_cnt "+NUM_FRAMES_TO_COUNT_IN_TS_CLK_EST,&trx}send_sequence_to_device函数只打印它应该打印的部分。"estim_fs_to_cnt"而不是"trx_set_jr_estim_fs_to-cnt 5"

问题在于您试图将字符串与整数连接的方式:

"trx_set_jr_estim_fs_to_cnt " + 1

不变成"trx_set_jr_estim_fs_to_cnt 1",而是变成"rx_set_jr_estim_fs_to_cnt "

之所以会发生这种情况,是因为在c和c++中,字符串文字默认为类型const char*,并且当您向指针添加数字时,指针将按此值递增。

您可以使用字符串流:

std::stringstream ss;
ss << "trx_set_jr_estim_fs_to_cnt " << NUM_FRAMES_TO_COUNT_IN_TS_CLK_EST;
map<const string_t, device_t*> setRegMsg={{ss.str(),&trx},[...]