C++ set自定义比较函数

C++ STL 中set存储元素的默认顺序是升序的.但有的时候我们想要一个降序的.或者合并区间的(下面会有解释)顺序.这时候就要用到自定义比较.

set的自定义比较函数是用重新定义()这个符号.
struct cmp{
bool operator() (const int &u , const int &v)const{
if(abs(u,v)<=k)return false;
return u<v;
}}
上面这个自定义比较函数就是重新定义了一个合并区间的set.含义是.如果在set中已经含有了一个u,与将要插入的元素v相差小于k,那么就不插入他了.
正常的变成降序很简单.
struct cmp{
bool operator() (const int &u , const int &v)const{
return u>v;
}}

### C++ STL Set 自定义比较器示例 在C++标准模板库中,`std::set` 是一种关联容器,默认情况下会按照键值升序排列。为了实现自定义排序,可以在创建 `std::set` 实例时提供一个自定义比较函数或仿函数。 #### 使用 Lambda 表达式作为比较器 Lambda表达式可以方便地用于定义简单的比较逻辑: ```cpp #include <iostream> #include <set> int main() { // 定义降序排列的整数集合 std::set<int, decltype([](const int& a, const int& b){ return a > b; })> s( [](const int& a, const int& b) { return a > b; }); s.insert(10); s.insert(20); s.insert(5); for (auto elem : s) std::cout << elem << " "; // 输出:20 10 5 return 0; } ``` #### 使用类成员函数作为比较器 当需要更复杂的比较逻辑时,可以通过定义一个具有特定签名的操作符重载函数的对象来完成此操作: ```cpp #include <iostream> #include <string> #include <set> struct StringCompare { bool operator()(const std::string &lhs, const std::string &rhs) const { // 按字符串长度降序排列;如果长度相同,则按字典顺序升序排列 if(lhs.size() != rhs.size()) return lhs.size() > rhs.size(); else return lhs < rhs; } }; int main(){ std::set<std::string, StringCompare> strSet; strSet.insert("hello"); strSet.insert("world"); strSet.insert("abc"); for(const auto& str : strSet){ std::cout << str << "\n"; } return 0; } ``` 对于用户定义的数据结构,也可以通过特化 `std::hash` 来支持哈希表类型的查找效率优化[^1],但这与当前讨论的主题无关。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值