C++ STL 容器优化:使用 unordered_map 提高函数效率
使用 STL 容器优化上述函数可以通过使用 'unordered_map' 来替代 'vector',以提高查找速度。
首先,需要包含头文件 '<unordered_map>'。然后,将原来的 'vector' 容器改为 'unordered_map' 容器,键类型为 'uint32_t',值类型为 'addr_map_t'。
修改后的代码如下:
#include <unordered_map>
typedef struct
{
uint32_t old_func;
uint32_t new_func;
uint32_t count;
vector<uint32_t> old_pos_v;
vector<uint32_t> new_pos_v;
} addr_map_t;
std::unordered_map<uint32_t, addr_map_t> m_map_invalid_func_addr;
std::unordered_map<uint32_t, addr_map_t> m_map_normal_func_addr;
int save_normal_func(uint32_t func0, uint32_t func1, uint32_t pos0, uint32_t pos1)
{
auto it = m_map_normal_func_addr.find(func0);
if (it != m_map_normal_func_addr.end() && it->second.new_func == func1)
{
it->second.count++;
it->second.old_pos_v.push_back(pos0);
it->second.new_pos_v.push_back(pos1);
return 0;
}
addr_map_t st;
st.count = 1;
st.old_func = func0;
st.new_func = func1;
st.old_pos_v.push_back(pos0);
st.new_pos_v.push_back(pos1);
m_map_normal_func_addr[func0] = st;
return 1;
}
int save_invalid_func(uint32_t func0, uint32_t pos0, uint32_t pos1)
{
auto it = m_map_invalid_func_addr.find(func0);
if (it != m_map_invalid_func_addr.end())
{
it->second.count++;
it->second.old_pos_v.push_back(pos0);
it->second.new_pos_v.push_back(pos1);
return 0;
}
addr_map_t st;
st.count = 1;
st.old_func = func0;
st.old_pos_v.push_back(pos0);
st.new_pos_v.push_back(pos1);
m_map_invalid_func_addr[func0] = st;
return 1;
}
通过使用 'unordered_map' 容器,可以将查找操作的时间复杂度降低为 O(1),从而提高了函数的效率。
原文地址: https://www.cveoy.top/t/topic/qxRZ 著作权归作者所有。请勿转载和采集!