如何使得关联容器对结构体有效

其实在最开始遇到这个问题实在做一道搜索类型的题目时 想实现的是利用结构体进行剪枝
但发现map并不能够使用 当时没有继续深挖这个问题 随着对C++的学习 今天得到了解答 遂写一篇博客。

我们可以去想使用关联容器时内部是如何对其进行比较的呢 map的内部实现是红黑树(我太菜了 还没有学红黑树。。) 但就目前学的来说二叉平衡树的实现比较运算符只需要一个<号就可以实现 我们自定义的结构体没有比较运算符又怎么可以使用关联容器呢
所以我们要做的其实就是去提供一个比较操作 根据C++ Primer 中来说 就是定义一个严格弱序 其实实现很简单 就是去写一个可调用对象 把其类型指针做为一个额外的参数 使得在添加元素时 我们的比较操作可以生效

下面是一个简单的演示

#include<iostream>
#include<algorithm>
#include<map>
using namespace std;

typedef struct{
    int ans;
    char ch;
}node;

bool compare(node a,node b)
{
    return a.ans < b.ans;
}

map <node,int,decltype(compare)*> mp(compare);

int main()
{
    node book[5];
    for(auto x : book){
        cin >> x.ans >> x.ch;
        mp[x]++;
    }
    for(const auto &x : mp)
    {
        cout << x.first.ch << ": " << x.second << endl;
    }
    return 0;
}

原文链接: https://www.cnblogs.com/lizhaolong/p/16437412.html

欢迎关注

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

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

    如何使得关联容器对结构体有效

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

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

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

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

(0)
上一篇 2023年4月5日 下午1:45
下一篇 2023年4月5日 下午1:45

相关推荐