多集计数方法不适用于 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 ->
中编译的问题
我有这个结构
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 ->