关于STL嵌套结构体的探索

有的时候代码底力会从STL运用上显现出来,导致我发现我还有好多STL的运用并不熟练

SET套结构体

set套结构体要重载<运算符

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <bits/stdc++.h>
using namespace std;
struct node
{
int a,b,c;
bool operator<(const node& x) const
{
return a==x.a?b<x.b:a<x.a;
}
};
set<node> st;
int main()
{
st.insert((node){1,2,3});
st.insert((node){1,3,2});
for(auto it=st.begin();it!=st.end();it++)
cout<<it->a<<" "<<it->b<<" "<<it->c<<"\n";
}

MAP套结构体

与set一样需要重载<运算符

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <bits/stdc++.h>
using namespace std;
struct node
{
int a,b,c;
bool operator<(const node& x) const
{
return a==x.a?b<x.b:a<x.a;
}
};
set<node> st;
map<node,int> mp;
int main()
{
mp[(node){1,1,1}]++;
mp[(node){1,1,1}]++;
cout<<mp[(node){1,1,1}];
}

优先队列套结构体很常见这里不多赘述 (似乎他的<与普通的定义相反?)

unordered_map套结构体

这个嵌套比较复杂首先需要重载==运算符然后我们还需要自己手写一个hash规则,用结构体里面重载size_t operator()之后再传入参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <bits/stdc++.h>
using namespace std;
struct node
{
int a,b,c;
bool operator==(const node& x) const
{
return a==x.a&&b==x.b&&c==x.c;
}
};
struct hs
{
size_t operator()(const node&x) const
{
return x.a*100+x.b*10+x.c;
}
};
unordered_map<node,int,hs> mp;
int main()
{
mp[(node){1,1,1}]++;
mp[(node){1,1,1}]++;
cout<<mp[(node){1,1,1}];
}

lower_bound or upper_bound

这两个玩意都是二分,所以要先保证序列有序才行,如果我们要找降序序列中第一个小于等于的位置的话我们需要用
lower_bound(a+1,a+1+n,k,[](int a,int b){return a>b;});
结构体的话会有多维所以要先按照一维排序后重载函数即可

就算是一分钱,也是对作者极大的支持
------ 本文结束 ------

版权声明

Baccano by baccano is licensed under a Creative Commons BY-NC-ND 4.0 International License.
baccano创作并维护的Baccano博客采用创作共用保留署名-非商业-禁止演绎4.0国际许可证
本文首发于baccano 博客( http://baccano.fun ),版权所有,侵权必究。

小游戏

---小游戏:要不要来选择一下自己可能的老婆?---

简易发声器

---简易的七键钢琴插件---

可以使用鼠标点击琴键也可以使用主键盘1-7或者小键盘的1-7来操作

那么现在开始吧

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
0%