<c++> STL set自定义比较函数

本文讨论了在C++编程中,关于比较函数bool operator()(const CTest& lc, const CTest& rc)在不同GCC版本间的编译行为差异。在GCC 4.8.5中可以编译通过,但在更新的GCC 11.0.1中需要在函数声明中添加const关键字以符合更严格的C++11标准。示例代码展示了在集合中使用自定义比较函数实现元素排序的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转载自:
https://blog.youkuaiyun.com/yasi_xi/article/details/8701220

注意:

  1. 比较函数bool operator() (const CTest& lc, const CTest& rc)后不添加const时在gcc 4.8.5 c++11可以通过编译,在目前最新的gcc 11.0.1中不能通过编译,严谨起见,添加了const. 原因估计是gcc 11.0.1中默认编译参数-std 大于c++11。

代码:

#include <set>
#include <string>
#include <iostream> 
using namespace std;
 
class CTest {
public:
        CTest() { num = 0; str = ""; }
        CTest(int _num, string _str) { num = _num; str = _str; }
        string str;
        int num;
};
 
class CTestCmp {
public:
        bool operator() (const CTest& lc, const CTest& rc) const {
                //return !!(lc.num < rc.num);
                return lc.str < rc.str;
        }
};
 
typedef set<CTest, CTestCmp> CTestSet;
 
void OutputCTestSet(const CTestSet &_set) {
        cout << "Set [" << endl;
        for(auto it = _set.begin(); it != _set.end(); ++it) {
                cout << "str:" << it->str << ", num:" << it->num << endl;
        }
        cout << "]" << endl;
}
 
int main()
{
        CTestSet _set;
        _set.insert(CTest(2, "hello"));
        _set.insert(CTest(1, "world"));
        _set.insert(CTest(3, "blowing"));
        OutputCTestSet(_set);
 
        return 0;
}

执行结果:

Set [
str:blowing, num:3
str:hello, num:2
str:world, num:1
]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值