当前位置:  开发笔记 > 编程语言 > 正文

在C ++中排序不匹配'operator +'

如何解决《在C++中排序不匹配'operator+'》经验,为你挑选了1个好方法。

我定义了一个班级

class Rent
{
    public:    
    int s_time, duration, price, e_time;
    Rent(int s, int d, int p)
    {
        s_time = s;
        duration = d;
        price = p;
        e_time = s + d;
    }
    bool operator<(Rent const &r1)
    {
        return e_time < r1.e_time;
    }
};

希望根据对其进行排序e_time,因此我已经定义<Rent,但是,我不断收到错误消息

rent.cpp:38:12: error: no match for ‘operator+’ (operand types are ‘std::vector’ and ‘int’)

     sort(R, R+n);
              ^

当我尝试的时候sort(R, R+n);R是类型的向量,Rent并且n是整数(向量的大小)。

除上述以外,我尝试了这两种方法,但仍然失败!

sort(R, R + sizeof(R)/sizeof(R[0]));
sort(R.begin(), R.end());

我用google搜索了lambdas的一些解决方案,但是sort()的第二个参数再次是int + custom_datatype类型。

任何帮助都会很棒。



1> R Sahu..:
sort(R, R+n);
sort(R, R + sizeof(R)/sizeof(R[0]));

如果R类型为,将不起作用std::vector。这些行有两个问题:

    operator+()没有为定义std::vector

    编译器期望该operator<()函数是const成员函数。

您可以operator<()通过使其成为const成员函数来修复该函数。

bool operator<(Rent const &r1) const
                           //  ^^^^^
{
    return e_time < r1.e_time;
}

那仍然不能解决第一个问题。

但是,您应该可以使用:

sort(R.begin(), R.end());

之后。

从理论上讲,您不必使该operator<()函数成为非const成员函数。看看http://en.cppreference.com/w/cpp/algorithm/sort。请参阅comp参数说明。它说:

比较函数的签名应等效于以下内容:

bool cmp(const Type1 &a, const Type2 &b);

签名不需要具有const &,但是功能对象一定不能修改传递给它的对象。

但是,并非所有的编译器都遵守。他们希望函数的签名能够与const对象一起使用。

推荐阅读
ar_wen2402851455
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有