作为一名高级工程师使用C++中STL容器优化下列函数使时间复杂度最低32位程序typedef struct uint32_t old_func; 这里包含基准地址 uint32_t new_func; uint32_t count; vectoruint32_t old_pos_v; 此处不包含基准地址 vectoruint32_t
使用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),从而提高了函数的效率
原文地址: http://www.cveoy.top/t/topic/iRSj 著作权归作者所有。请勿转载和采集!