使用 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),从而提高了函数的效率。

C++ STL 容器优化:使用 unordered_map 提高函数效率

原文地址: https://www.cveoy.top/t/topic/qxRZ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录