C++-STL(9)-unordered_map-自定义类型(2)key-自定义对象指针-实例源码

C++-STL(8)-unordered_map讲的自定义对象中的成员变量基础数据类型。
本篇实现的是成员变量自定义对象 key值自定义对象指针。
注意点:1.创建:重载=,重载<,重载 哈希函数
               2.删除时 要delete 和置空。
上代码:

 

class nodemap {
public:
    int m_value;        //基础数据类型
    nodemap* next;      //自定义对象指针

    nodemap(int val)
    {
        m_value = val;
        next = NULL;
    }
    bool operator < (const nodemap& n) const    //重载<
    {
        return m_value < n.m_value;
    }
    bool operator==(const nodemap& rc) const      //重载=
    { 
        return m_value == rc.m_value && next == rc.next;
    }
    size_t operator()(const nodemap& rc)const              //重载hash
    {
        return hash<int>()(rc.m_value) ^ hash<nodemap*>()(rc.next);

    }

};
void unorderedmap_main()
{
    cout<<"**unorderedmap_main*************"<<endl;
    cout << "新建*************" << endl;
//  hashtest();
    //hash<int> hash_int;
//  unordered_map <nodemap*, int, nodemap_hash> mp;
    unordered_map <nodemap*, int> mp;
    nodemap* findnode = NULL;
    nodemap* deletenode = NULL;
    for (int i = 0; i < 5; i++)
    {
        nodemap* node = new nodemap(i);
        mp.insert(make_pair(node, i));
        if (i == 2) { findnode = node; }
        if (i == 3) { deletenode = node; }
    }
    for (auto iter = mp.begin(); iter != mp.end(); ++iter)
    {
        cout << "node.frist.m_value=" << iter->first->m_value << endl;
    }


    unordered_map <nodemap*, int>::iterator it;
    for (it = mp.begin(); it != mp.end(); it++)
    {
        if (it->first != nullptr)
        {
            cout << it->first->m_value << ",,second=" << it->second << endl;
        }
    }
    cout << "查找 2*************" << endl;

    auto findit = mp.find(findnode);
    cout << findit->first->m_value << "***" << findit->second << endl;
    cout << "删除 3 后*************" << endl;
    for (auto iter = mp.begin(); iter != mp.end(); ++iter)
    {
        auto first = iter->first;
        if (first->m_value == 3)
        {
            delete first;                 // 释放指针
            first = NULL;
            mp.erase(iter++);
        }
    }
    for (it = mp.begin(); it != mp.end(); it++)
    {
        if (it->first != nullptr)
        {
            cout << it->first->m_value <<"***"<< it->second << endl;
        }
    }
    cout << "释放*************" << endl;
    for (auto iter = mp.begin(); iter != mp.end(); )
    {
        auto first = iter->first;
        if (first)
        {
            delete first;                 // 释放指针
            first = NULL;
            mp.erase(iter++);            // 从map中删除元素,注意iter++的写法
        }
    }
    mp.clear();
}

 

原文链接: https://www.cnblogs.com/jasmineTang/p/14369291.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    C++-STL(9)-unordered_map-自定义类型(2)key-自定义对象指针-实例源码

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/327677

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月1日 下午4:22
下一篇 2023年3月1日 下午4:22

相关推荐