如何使得关联容器对结构体有效
其实在最开始遇到这个问题实在做一道搜索类型的题目时 想实现的是利用结构体进行剪枝
但发现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;
}