STL 的 std::set 创建自定义结构体的对象,定义严格弱序的比较函数

文章目录

简 述: 对于 STLstd::set 创建自定义结构体的对象,发现使用 “函数对象”“定义普通函数 + decltype” 两种方式会有差异,且其中一种书写会导致崩溃?探究一番后,值得记录一下。


本文初发于 “偕臧的小站”,同步转载于此。


正文

对于 std::set 创建对象分为两种:⒈基础数据类型; ⒉自定义结构体类型。前者教程很多,故仅讲述后者;

💻 win10 21H2 📎 Visual Studio 2019 📎 C++17


其中对于其中两种方式创建,使用示例如下,此处直接放结论:

  • 函数对象(仿函数)
  • 定义普通函数 + decltype
std::set<MyData, cmpSortObj>  s;                      // "函数对象"创建 set 对象 --> OK

std::set<MyData, decltype(cmpSort)*>  s(&cmpSort);    // "定义普通函数 + decltype"创建 set 对象 -->    OK:  编译、运行成功;调试也成功
std::set<MyData, decltype(cmpSort)*>  s;              //                                     --> Error:  编译、运行成功;调试会失败

Ref


系列地址

QtExamples

欢迎 star ⭐ 和 fork 🍴这个系列的 C++ / QT / DTK 学习,附学习由浅入深的目录。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

偕臧x

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值