如何使得关联容器对结构体有效
其实在最开始遇到这个问题实在做一道搜索类型的题目时 想实现的是利用结构体进行剪枝
但发现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;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南