C++ STL中容器的自定义排序以及应用。

本文探讨了C++中Class与Struct的区别,介绍了仿函数的概念及其相对于普通函数的优势,包括性能提升和上下文参数传递。此外,文章通过实例讲解了如何在STL容器中进行自定义排序,并讨论了有序数组中找第k小元素、TopK问题等场景的应用,强调了堆在解决集合问题中的重要性。
摘要由CSDN通过智能技术生成

1. Class和Struct的区别

在C++中Class对于成员访问权限和继承关系默认是private的,而Struct默认是public的。

2. 仿函数:

用Struct或者Class模拟成函数一样。仅仅只需要在类中维护必要的变量和重载运算符()即可。

3. 为什么用仿函数替代调用函数?

仿函数可以不留痕迹的传递上下文参数,而普通函数需要一个void* 指针进行传递。因为struct是默认成员访问权限是public的,可以直接调用struct的成员(Class设置为public也是一样的)。

而且仿函数具备更好的性能,因为编译器在编译期间就把仿函数的调用进行inline展开。如果函数简单并且定义为inline函数,也会在编译期间展开(为什么要inline?如果展开的话,就没有必要传入函数指针进而占用栈的空间,所以省去函数对栈空间的使用,但会一定程度上使得代码膨胀,用空间换时间的做法),但inline定义仅仅是对编译器的建议,如果func过大,编译器同样不会进行inline展开。但对仿函数的调用编译器是默认inline展开的。

4 有序数组中第k小元素378

STL模板中大多数都是用()来比较大小的, 如果要传入比较器那么就重构()

如果不想传入比较器,那么会默认比较使用less,此时仅仅需要重构<即可。

帮助记忆:前面小于后面的,那么sort的话就是上升的。priority queue就是大根堆,因为优先队列的首指针是指向队尾的。好记一些大不了试试就完了。

int kthSmallest(vector<vector<int>>& matrix, int k
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值