decltype用于自定义排序的理解

以前也没怎么写过,就知道跟auto类似,推断类型的,也没怎么用过。也就偶尔写写unordered_map或者set自定义排序的时候会用到,那会也是,有时候用到decltype也不知道为什么要加&或者不加&。今天整好在做我lc的每日一题,又要自定义排序关系,又蒙逼了所以决定研究一下。题目很简单topK问题。
在这里插入图片描述

不带&,会认为他是一个函数?
在这里插入图片描述
带了&号才会认为他是一个函数指针
在这里插入图片描述

所以LC这道题就要带&,来表明是一个函数指针类型。

写这道题的时候去stackoverflow看了看他们的写法,在贴三种做法吧
在这里插入图片描述
直接用function来转换。
在这里插入图片描述
和我做法一致
在这里插入图片描述

使用lambda表达式来做
在这里插入图片描述
decltype(lambda)还是一个lambda表达式,不需要转换成指针的形式。

在这里插入图片描述
stackoverflow的文章链接
还是对decltype掌握的不熟练,这个细节才一直没有想明白,慢慢学吧~

`decltype`是C++11中引入的一个类型指示关键字,用于在编译时推导一个表达式的类型。`map`是C++标准模板库(STL)中的一个容器,用于存储键值对,并且它会根据键自动排序,通常默认使用键的`operator<`来进行排序。 如果你想在C++中对`map`进行自定义排序,你可以定义一个比较函数对象或者使用lambda表达式来指定不同的排序方式。例如,如果你想要一个按照键的降序排列的`map`,你可以这样做: ```cpp #include <iostream> #include <map> #include <functional> // 自定义比较函数 struct CompareDescending { bool operator()(const int& lhs, const int& rhs) const { return lhs > rhs; } }; int main() { // 使用自定义的比较函数创建map std::map<int, int, CompareDescending> myMap; // 插入一些元素 myMap[1] = 100; myMap[2] = 200; myMap[3] = 300; // 输出map中的元素 for (const auto& pair : myMap) { std::cout << pair.first << ": " << pair.second << std::endl; } return 0; } ``` 输出结果将会是: ``` 3: 300 2: 200 1: 100 ``` 这里我们创建了一个结构体`CompareDescending`,重载了`operator()`来实现自定义的比较逻辑。然后在定义`map`时将这个结构体作为第三个模板参数传入。 你也可以使用C++11引入的lambda表达式来定义一个简洁的比较函数: ```cpp std::map<int, int, std::less<int>> myMap; // 默认升序 std::map<int, int, std::greater<int>> myMap; // 使用lambda表达式的降序 ``` 或者使用lambda表达式直接在创建`map`时指定比较逻辑: ```cpp auto myMap = std::map<int, int>([](const int& lhs, const int& rhs) { return lhs > rhs; // 降序 }); ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值