下一个更大元素 I

本文介绍了C++中find和find_if函数的使用,包括它们的参数和复杂度。find用于查找特定元素,而find_if则用于查找满足特定条件的元素。此外,还讨论了greater和less函数以及仿函数和bind2nd在排序和条件判断中的应用。
摘要由CSDN通过智能技术生成

在这里插入图片描述

class Solution {
public:
    vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) {
        vector<int> re;
        for(int i=0;i<nums1.size();i++){
            auto it2=find(nums2.begin(),nums2.end(),nums1[i]);
             int y=it2-nums2.begin();
            auto it=find_if(nums2.begin()+y, nums2.end(), bind2nd(greater<int>(), nums1[i]));
            int x=it-nums2.begin();
            if(x>=nums2.size()) re.push_back(-1);
            else re.push_back(nums2[x]);
        }
        return re;
    }
};

find()函数与find_if()返回的均为地址;-vector.begin()得到元素i的坐标。
find(first,last,val); //first是容器的首迭代器,last是容器的末迭代器,val是询问的元素。这个函数是在数据量较小或在无法用更高效率的函数解决问题的题目上使用,它的最坏复杂度是O(n),效率比较低。
find_if(first,last,compare);//first为首迭代器,last为末迭代器,compare为比较函数。查找第一个满足某个条件的值(并不是等于val的元素的位置)的位置。
greater()表示内置类型从大到小排序,less()表示内置类型从小到大排序。
(仿函数/bind2nd): 仿函数(functors)其实就是重载了operator()的对象。仿函数可以与函数适配器搭配使用。例如我们如果要使用count_if算法来计算容器中大于10的元素的个数。如果我们使用greater作为判别式(二元),而count_if只接受一个一元判别式,这时候我们就需要搭配函数适配器一起使用了。
bind2nd可以将二元仿函数转化为一元仿函数。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值