多集计数方法不适用于 class 比较器

multiset count method not working with class comparator

我有这个结构

struct C {
    int ID;
    int age;
    C(int ID, int age) : ID{ID}, age{age} {}
};

我对多重集使用比较器函数

bool fncomp (const C& lhs, const C& rhs) {
    return lhs.age < rhs.age;
}

multiset<C, decltype(fncomp)*> ms{fncomp};
ms.emplace(1, 15);
...

// this works fine
ms.count(C(1, 15));

但是,如果我使用 class 比较器,它将不再起作用。

struct classcomp {
    bool operator() (const C& lhs, const C& rhs) {
        return lhs.age < rhs.age;
    }
};

multiset<C, classcomp> ms;
ms.emplace(1, 15);
...

// error
// ms.count(C(1, 15));

两者有什么不同?

详细说明我上面的评论:

multiset::count是一个const成员函数,这意味着它对const multiset进行操作。这包括多重集的成员变量。比较器是multiset的成员变量。

因为你的classcomp::operator()没有被标记const,所以不能在const对象上调用,所以编译失败。

这适用于函数指针示例,因为在这种情况下它是常量的 指针

bool operator() (const C& lhs, const C& rhs) const  {
    return lhs.age < rhs.age;
}

这将修复在 this link you provided, courtesy of @Marshall ->

中编译的问题