迭代器不会迭代整个映射
The iterator doesn't iterate over the entire map
我有以下功能:
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::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);
}
我可以看到循环只迭代了2次,而不是3次。输出为:
sarit enter to seq get_node_ts_est
sarit enter to get_tx_num_clk_ts
而我期待:
sarit enter to seq get_node_ts_est
sarit enter to seq get_node_ts_est
sarit enter to get_tx_num_clk_ts
std::map
不允许重复密钥。
您的两个值具有相同的键,因此只有其中一个值会进入地图。
如果需要重复密钥,请使用std::multimap
而不是std::map
。
相关文章:
- 错误 C2760:语法错误:映射迭代器上意外的标记"标识符",预期的";"
- 映射迭代器与运算符不匹配
- 我可以将映射迭代器与 OpenMP 并行使用吗?
- 取消引用映射迭代器时返回对临时的引用
- 为什么映射迭代器显示基本操作数无效错误
- 复制映射迭代器对值的省略
- ->第一个/第二个到空映射迭代器开始
- 由引用集/映射迭代器传递的迭代器不可取消引用
- 在 GCC 上自动声明映射迭代器错误
- 指向同一项的两个映射迭代器是否保证相等
- 嵌套映射迭代器
- 模板标准::映射::迭代器实例化
- 映射迭代器遍历技术
- 映射迭代器与手动
- VC++11映射和多映射迭代器(重载)C2535
- 切换情况下映射迭代器的交叉初始化
- C++-映射迭代器中的if语句导致程序崩溃的原因
- 映射迭代器:一元'*'的无效类型参数(具有"int")
- 比较未引用的映射迭代器(std::pairs):C2678
- 与C++中擦除映射迭代器的行为不一致