C++-STL(11)-map-结构体指针作为key

map中如果要存的是结构体指针怎么做?
创建时:重载 <函数,你得告诉Map如何排序。
查找时:重载==,你得告诉MAP何时相等。
删除时:delete外还要置空,因为是new的。
上代码:
 

#include <map>
#include <iostream>

using namespace std;

struct Key
{
    int x, y;
    bool operator==( const Key& b) const //需要重载==才能find
    {
        return x == b.x && y == b.y;
    }
};

struct CompareKey
{
    bool operator()(Key* a, Key* b)const //作为key得告诉map如何比较
    {
        return a->x < b->x;
    }


};


void map_key()
{
    cout<<"mapkey*************"<<endl;
    cout << "新建*************" << endl;
    map<Key*, int, CompareKey> mp;
    Key* findkey = NULL;
    for (int i = 0; i < 5; i++)
    {
        Key* k = new Key;
        k->x = i;
        k->y = i;
        mp.insert(make_pair(k, i));
        if (i == 2) { findkey = k; }
    }
    map<Key*, int, CompareKey>::iterator it;
    for (it = mp.begin(); it != mp.end(); it++)
    {
        if (it->first != nullptr)
        {
            cout << it->first->x << it->first->y << it->second << endl;
        }
    }
    cout << "查找*************" << endl;

    auto findit = mp.find(findkey);
    cout << findit->first->x << findit->first->y << findit->second << endl;
    cout << "删除*************" << endl;


    for (auto iter = mp.begin(); iter != mp.end(); ++iter)
    {
        auto first = iter->first;
        if (first->x == 3)
        {
            delete first;                 // 释放指针
            first = NULL;
            mp.erase(iter++);
        }
    }
    for (it = mp.begin(); it != mp.end(); it++)
    {
        if (it->first != nullptr)
        {
            cout << it->first->x << it->first->y << 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/14369292.html

欢迎关注

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

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

    C++-STL(11)-map-结构体指针作为key

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

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

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

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

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

相关推荐