【c/c++】STL中 结构体的运算符重载

转载自: https://www.cnblogs.com/ssfzmfy/p/13175332.html

背景

C++中,结构体是无法进行==,>,<,>=,<=,!=操作的,如要使用这些操作符对结构体进行操作,则可以在结构体内部对这些运算符进行重载,将结构体的比较转化为结构体内部的数字或者字符的比较

实际编程中,大部分时候操作对象是结构体数组,尤其是在使用STL容器的时候,如果我们可以往语句中传入结构体,一些事情将会变得很简单。因此掌握结构体运算符的重载是非常必要的。

重载的方式

一、在结构体内部的重载

重载运算符的格式如下:

bool operator 运算符 (const 结构体名称 b) const
{
    return(什么时候这个运算符对结构体成立);
}

在这里插入图片描述
在这里插入图片描述
priority_queueq;//优先队列

二、结构体外的重载

在这里插入图片描述
在这里插入图片描述
priority_queue<tmp,vector,cmp>q;;//优先队列

补充:operator() 的使用

operator()是函数调用操作符!
STL中的各种functor就是重载它实现的.

举例1:

class test
{
    void operator()(int x)
    {
        cout<<x<<endl;
    }
}
int main()
{
    test t;
    t(10);
    return 0;
}

举例2:

using namespace std;

class Function
{
public:
    double operator()(double x) 
    {  
        return 2*x;
    } 
};

int main()
{
    Function myFunc;
    cout<<myFunc(1.0)<<endl;

    system("pause");
}
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用提供了一些使用set的常见操作和方法。如果要访问set的最后一个元素,有几种方法可以实现。第一种方法是使用rbegin()函数,它返回一个指向set最后一个元素的反向迭代器,然后可以使用*运算符来获取该元素的值。第二种方法是使用end()函数返回一个指向set末尾的迭代器,然后通过--运算符将迭代器移动到最后一个元素,再使用*运算符获取该元素的值。第三种方法是直接使用end()函数返回的迭代器,然后使用--运算符将迭代器移动到最后一个元素,再使用*运算符获取该元素的值。提供了一个重载<运算符的示例代码。在这个示例,定义了一个结构node,并在结构重载了<运算符。通过重载<运算符,我们可以自定义set元素的比较规则。在main函数,创建了一个set<node>类型的集合s,并插入了一些元素。通过遍历集合s,我们可以看到集合的元素按照我们定义的比较规则进行排序。介绍了setlower_bound和upper_bound函数的使用。lower_bound函数返回大于或等于给定值的第一个元素的迭代器,而upper_bound函数返回大于给定值的第一个元素的迭代器。在示例代码,首先创建了一个set<int>类型的集合s,并插入了一些元素。然后使用lower_bound和upper_bound函数分别查找给定值的边界,并输出对应的元素值。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [C++ STL之set详解](https://blog.csdn.net/qq_50285142/article/details/122304728)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [【c++STL——第八讲】set系列 (常用知识点总结)](https://blog.csdn.net/m0_63233163/article/details/124645182)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值