MsgCommonInfo& common = p_node->GetCommonInfo(); SPUserInfo& sp_user_info = p_node->GetUserInfo(); uint64_t imsi = sp_user_info->GetIMSI(); if(common.eci == 0) { common.eci = sp_user_info->GetEci(); } uint16_t tmp_enbid = common.tac; uint64_t imei = common.imei;请根据以上信息用C++现一个函数,要求维护一组key、value的关系。 key:imsi value:imsi、imei、common.eci、common.tac、last_time 要求,imsi相同时,以最后一条记录的value内容为准进行保存
时间: 2024-03-25 19:36:37 浏览: 58
可以使用std::unordered_map来维护key-value的关系,代码如下:
```c++
#include <unordered_map>
#include <chrono>
struct Record {
uint64_t imsi;
uint64_t imei;
uint64_t eci;
uint16_t tac;
std::chrono::system_clock::time_point last_time;
};
std::unordered_map<uint64_t, Record> records;
void updateRecord(uint64_t imsi, uint64_t imei, uint64_t eci, uint16_t tac) {
auto now = std::chrono::system_clock::now();
records[imsi] = {imsi, imei, eci, tac, now};
}
```
在以上的代码中,我们定义了一个struct Record来保存imsi、imei、eci、tac和最后更新时间。然后我们使用std::unordered_map来保存imsi和对应的Record。当需要更新某个imsi的记录时,直接调用updateRecord函数即可。如果这个imsi已经存在了,那么会直接覆盖之前的记录,保存最新的信息。
相关问题
MsgCommonInfo& common = p_node->GetCommonInfo(); SPUserInfo& sp_user_info = p_node->GetUserInfo(); //获取 buf TlvEncoder* p_encoder_cur = g_p_encoder_[worker_id]; YdCDR_T* p_dst_data = (YdCDR_T*)malloc(sizeof(YdCDR_T)); if (p_dst_data == NULL) { return; } p_dst_data->not_associate = 0; if ((common.not_associate & 0x03) == 0x03) p_dst_data->not_associate = 1; p_encoder_cur->Set(p_dst_data->cdr_data,kMaxOneCdrBufLen); uint64_t imsi = sp_user_info->GetIMSI(); if(common.eci == 0) { common.eci = sp_user_info->GetEci(); } uint16_t tmp_enbid = common.tac;//>>8; //uint32_t tmp_enbid = (common.eci >> 8)&0xfffff; char xdrid_str[32]={0};什么意思
这段代码是一个函数的实现,主要功能是获取一些信息并将其编码成二进制数据。具体来说,这段代码首先获取了一个节点的共同信息和用户信息。然后,它创建了一个编码器对象,并分配了一个用于存储编码数据的缓冲区。接着,它将一些信息存储到这个缓冲区中,例如是否关联、IMSI号、ECI号等。最后,它将缓冲区中的数据编码,并将结果存储到一个名为xdrid_str的字符数组中。
void S1mmeSession::UpdateKqiInfo(S1APNode* p_node) { MsgCommonInfo& common = p_node->GetCommonInfo(); SPUserInfo& sp_user_info = p_node->GetUserInfo(); uint64_t imsi = sp_user_info->GetIMSI(); uint64_t imei = common.imei; uint32_t eci = common.eci == 0 ? sp_user_info->GetEci() : common.eci; uint16_t tac = common.tac; uint64_t last_time = current_time_.tv_sec; //IMSI_T imsi_key(imsi); //IMSI_Iter iter = ue_imsi_map_.find(imsi_key); //LogInfo("%d",common.imei); KqiValue& kqi_value = kqi_map_[imsi]; auto it = kqi_map_.find(imsi); if (it != kqi_map_.end()) { // 如果imsi已存在,则更新其value kqi_value.imsi = imsi; kqi_value.imei = imei; kqi_value.eci = eci; kqi_value.tac = tac; clock_gettime(CLOCK_REALTIME, &kqi_value.last_time); } LogInfo("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!!!!!!"); return; }添加代码,如果imsi不存在就正常添加
可以在`if (it != kqi_map_.end())`语句块之前添加如下代码:
```cpp
if (it == kqi_map_.end()) {
// 如果imsi不存在,则创建一个新的KqiValue对象并插入map中
KqiValue kqi_value_new;
kqi_value_new.imsi = imsi;
kqi_value_new.imei = imei;
kqi_value_new.eci = eci;
kqi_value_new.tac = tac;
clock_gettime(CLOCK_REALTIME, &kqi_value_new.last_time);
kqi_map_.insert({imsi, kqi_value_new});
return;
}
```
这样就可以在`imsi`不存在时创建一个新的`KqiValue`对象并将其插入到`kqi_map_`中。完整的函数代码如下:
```cpp
void S1mmeSession::UpdateKqiInfo(S1APNode* p_node) {
MsgCommonInfo& common = p_node->GetCommonInfo();
SPUserInfo& sp_user_info = p_node->GetUserInfo();
uint64_t imsi = sp_user_info->GetIMSI();
uint64_t imei = common.imei;
uint32_t eci = common.eci == 0 ? sp_user_info->GetEci() : common.eci;
uint16_t tac = common.tac;
uint64_t last_time = current_time_.tv_sec;
KqiValue& kqi_value = kqi_map_[imsi];
auto it = kqi_map_.find(imsi);
if (it == kqi_map_.end()) {
// 如果imsi不存在,则创建一个新的KqiValue对象并插入map中
KqiValue kqi_value_new;
kqi_value_new.imsi = imsi;
kqi_value_new.imei = imei;
kqi_value_new.eci = eci;
kqi_value_new.tac = tac;
clock_gettime(CLOCK_REALTIME, &kqi_value_new.last_time);
kqi_map_.insert({imsi, kqi_value_new});
return;
}
// 如果imsi已存在,则更新其value
kqi_value.imsi = imsi;
kqi_value.imei = imei;
kqi_value.eci = eci;
kqi_value.tac = tac;
clock_gettime(CLOCK_REALTIME, &kqi_value.last_time);
return;
}
```
阅读全文