关于lower_bound带4个参数的用法

时间:2022-09-28 16:59:37
lower_bound有个版本是带2元判断式的,想问下这个2元的判断式应该怎么写了,我有个排好序的list,需要找出大于某个值的元素,但我list里面放的是个类指针,需找的是某个类成员,所以没办法用3个参数的那种,想问下2元判断式是否可以用,该怎么写了?


部分简略代码如下:

class RevFaxTask
{
public:
RevFaxTask(void);
virtual ~RevFaxTask(void);
public:
   
    std::string       m_RevDateTime;
};

class CoreUserBox
{
public:
std::list < RevFaxTask * > m_list;

};
        std::list<RevFaxTask *>::iterator pos1;
std::list<RevFaxTask *>::iterator pos2;
CoreUserBox testList;
        
        pos1 = lower_bound(testList.m_list.begin(), testList.m_list.end(),........);


这后面的省略部分应该怎么写了?我需要比较的是一个日期时间,即将m_List里的Revdatetime和“2008-12-14 14:00:00”比,要找出大于2008-12-14 14:00:00的第一个元素位置。不知道是否可以用带4个参数的lower_bound的版本实现这个功能。。。

find_if的方法我用过了,我就想知道这个lower_bound这个用法,我是排序好的链表

6 个解决方案

#1


没有这个东西吧。
4个参数的是多带了一个判断式。当作排序用的。

#2


我就是想用带判断式的这种,不知道应该怎么写这个判断式,我看C++ 标准程序库上是说这个判断式是个2元的

#3


参照一下这个

template<class _Ty>
struct less_equal
: public binary_function<_Ty, _Ty, bool>
{ // functor for operator<=
bool operator()(const _Ty& _Left, const _Ty& _Right) const
{ // apply operator<= to operands
return (_Left <= _Right);
}
};

#4



class RevFaxTask 

public: 
RevFaxTask(string str=""):m_RevDateTime(str){};
virtual ~RevFaxTask(void); 
public:   
    std::string      m_RevDateTime; 
};
……
RevFaxTask  *SearchRev=new RevFaxTask("2008-12-14 14:00:00");
pos1=testList.m_list.lower_bount(SearchRev);

可以吗

#5


#include "iostream"
#include "list"
#include "algorithm"
using namespace std;

struct compare
{
    bool operator()(int* a, int* b)
    {
        return (*a) < (*b);
    }
};

int main()
{
    list<int*> listInts;

    for (int i = 0; i < 10; ++i)
        listInts.push_back(new int(i * 2));

    int n = 5;
    list<int*>::iterator iup = lower_bound(listInts.begin(), listInts.end(), &n, compare());

    if (iup != listInts.end())
        cout<<(**iup)<<endl;

    return 0;
}

#6


呵呵,看这个列子启发了我,lower_bound的第3个参数类型必须和第4个函数的传入参数类型一致才可以比较。。解决了问题,谢谢!

#1


没有这个东西吧。
4个参数的是多带了一个判断式。当作排序用的。

#2


我就是想用带判断式的这种,不知道应该怎么写这个判断式,我看C++ 标准程序库上是说这个判断式是个2元的

#3


参照一下这个

template<class _Ty>
struct less_equal
: public binary_function<_Ty, _Ty, bool>
{ // functor for operator<=
bool operator()(const _Ty& _Left, const _Ty& _Right) const
{ // apply operator<= to operands
return (_Left <= _Right);
}
};

#4



class RevFaxTask 

public: 
RevFaxTask(string str=""):m_RevDateTime(str){};
virtual ~RevFaxTask(void); 
public:   
    std::string      m_RevDateTime; 
};
……
RevFaxTask  *SearchRev=new RevFaxTask("2008-12-14 14:00:00");
pos1=testList.m_list.lower_bount(SearchRev);

可以吗

#5


#include "iostream"
#include "list"
#include "algorithm"
using namespace std;

struct compare
{
    bool operator()(int* a, int* b)
    {
        return (*a) < (*b);
    }
};

int main()
{
    list<int*> listInts;

    for (int i = 0; i < 10; ++i)
        listInts.push_back(new int(i * 2));

    int n = 5;
    list<int*>::iterator iup = lower_bound(listInts.begin(), listInts.end(), &n, compare());

    if (iup != listInts.end())
        cout<<(**iup)<<endl;

    return 0;
}

#6


呵呵,看这个列子启发了我,lower_bound的第3个参数类型必须和第4个函数的传入参数类型一致才可以比较。。解决了问题,谢谢!