C++-STL(8)-unordered_map-自定义类型(1)-key-自定义对象-实例源码

本篇 自定义对象:Rect里的成员变量都是基础数据类型。
下篇  C++-STL(9)-unordered_map-自定义类型(2)-实例源码 成员变量是自定义对象
基础数据类型、自定义对象类型相比:
  1.定义:unordered_map<Rect, Rect_hash,int> rectmap;
                unordered_map<string,int> imap;
   2.访问:
              unordered_map<Rect, Rect_hash,int>::iterator iter;   iter->first.name
              unordered_map<string,int>::iterator iter;                        iter->first

以下是unordered_map 自定义类型增删改查代码实例:
1.class Rect{};

class Rect {
public:
    int width;
    int height;
    string name;


    Rect(int a, int b, string str)
    {
        width = a;
        height = b;
        name = str;
    }
    bool operator==(const Rect& rc) const
    {
        return name == rc.name && width == rc.width && height==rc.height;
    }

};

2.class Rect_hash{};
 

class Rect_hash
{
public:
    size_t operator()(const Rect& rc)const
    {
        return hash<string>()(rc.name) ^ hash<int>()(rc.width) ^ hash<int>()(rc.height);
    }

};

3.hashmap_rect()调用

void hashmap_rect()
{
    cout << "hashmap_rect*******************" << endl;
    //1.定义 unordered_map < Rect,int,Rect_hash> rectmap;
    //2.插入insert pair<,> make_pair(Rect(0, 300, "a"), 300));
    //3.得到大小 int nSize = rectmap.size();
    //4.查找 iter=rectmap.find()   输入key 返回iter
    //5.删除 int n=rectmap.erase(key) 返1 成功;返0 不成功
    //6.删除全部 rectmap.erase(rectmap.begin(), rectmap.end());
    //7.修改rectmap['d']=4000;

    cout << "1定义 unordered_map<Rect, Rect_hash,int> rectmap;" << endl;
    cout << " 2插入insert pair<,>" << endl;
    unordered_map <Rect, int,Rect_hash> rectmap;
    rectmap.insert(make_pair(Rect(0, 300, "a"), 300));
    rectmap.insert(pair<Rect, int>(Rect(1, 200, "z"), 200));
    rectmap.insert(pair<Rect, int>(Rect(2, 300, "b"), 300));
    rectmap.insert(pair<Rect, int>(Rect(3, 7, "d"), 7));
    rectmap.insert(pair<Rect, int>(Rect(4, 500, "f"), 500));
    for (auto iter = rectmap.begin(); iter != rectmap.end(); ++iter)
    {
        cout << "first.name=" << iter->first.name << "first.width=" << iter->first.width << "first.heigh=" << iter->first.height << endl;
    }
    cout << " 3得到大小 int nSize = rectmap.size();" << endl;
    int nSize = rectmap.size();
    cout << nSize << endl;
    cout << "4.查找 iter=rectmap.find(b)  输入key 返回iter Rect rect1 = Rect(2, 300, 'b'); " << endl;
    unordered_map<Rect, int, Rect_hash>::iterator iter;
    Rect rect1 = Rect(2, 300, "b");
    iter = rectmap.find(rect1);
    cout << "first.name=" << iter->first.name << "first.width=" << iter->first.width << "first.heigh=" << iter->first.height << endl;

    cout << "5.删除 int n=rectmap.erase(key) 返1 成功;返0 不成功  iter Rect rect2 = Rect(1, 200, 'z')" << endl;
    Rect rect2 = Rect(1, 200, "z");
    int n = rectmap.erase(rect2);
    cout << "删除后的返回值=" << n << endl;
    for (iter = rectmap.begin(); iter != rectmap.end(); iter++)
    {
        cout << "first.name=" << iter->first.name << "first.width=" << iter->first.width << "first.heigh=" << iter->first.height << endl;
    }
    cout << "6.修改rectmap[rect1]=4000;  rect1 = Rect(2, 300, 'b')" << endl;
    rectmap[rect1] = 4000;
    cout << rectmap[rect1] << endl;

    cout << "7.删除全部 rectmap.erase(rectmap.begin(), rectmap.end());" << endl;
    rectmap.erase(rectmap.begin(), rectmap.end());
    nSize = rectmap.size();
    cout << "删除全部后map的长度" << nSize << endl;

}

      
   
      

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

欢迎关注

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

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

    C++-STL(8)-unordered_map-自定义类型(1)-key-自定义对象-实例源码

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

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

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

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

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

相关推荐