c++ vector上的sort()函数的运算符重载没有匹配“operator〈”错误

cbeh67ev  于 2023-04-08  发布在  其他
关注(0)|答案(1)|浏览(136)

我是C++新手,正在尝试使用sort()函数对Event对象数组进行排序。我重载了Event对象的〈运算符,但当使用sort()比较两个Event对象时,我得到了一个:没有匹配'operator〈'错误。
这里我重载了Event类型的〈操作符,它在比较两个事件时起作用。这是在我的Event类中:

bool Event::operator<(const Event &rhs) {
    if (yearnum < rhs.year()) {
        return true;
    }
    else if (yearnum == rhs.year() && monthnum < rhs.month()) {
        return true;
    }
    else if (monthnum == rhs.month() && daynum < rhs.day()) {
        return true;
    }
    else {
        return false;
    }
}

这就是我在Event.h中声明重载运算符的方式

bool operator<(const Event&);

我想让sort()在对未排序的Event向量进行排序时使用重载的〈运算符。“events”是Event类型的向量。在进行这种排序时,我一直得到:no match for 'operator〈' error.这是在我的Schedule.cc文件:

void Schedule::read(istream &in) {
    string s;

    while (in >> s) {
        try {
            Event e(s);

            if (events.size() == 0) {
                events.push_back(e);
            }
            else {
                events.push_back(e);

                sort(events.begin(), events.end(), [](const Event &lhs, const Event &rhs) {
                    return lhs < rhs; // this is where the error occurs.
                });

            }
        }
        catch(...) {
            in.setstate(ios::failbit);
            throw;
        }
    }
}
myzjeezk

myzjeezk1#

[](const Event &lhs, const Event &rhs)
{
    return lhs < rhs; // this is where the error occurs.
}

lhsrhs都是对***const***对象的引用,正如你在这里看到的。

bool Event::operator<(const Event &rhs) {

您的<重载***不是***const类方法。只能在const对象上调用const方法。
顺便说一句,没有必要显式地将这个闭包传递给std::sort,一旦修复,<重载应该足以完全自己完成这项工作。

相关问题