我收到一个奇怪的编译器错误,并且由于我刚开始使用set与自定义结构,所以我不确定是什么问题。
我正在尝试创建一组“对”,并且正在使用自定义比较功能来插入所述对。
struct pairT {
std::string first, second;
};
int PairCmp(pairT &one, pairT &two) {
if (one.first < two.first && one.second == two.second) return 0;
else if (one.first < two.first) return -1;
else if (one.first == two.first && one.second < two.second) return -1;
return 1;
}
std::set<pairT> CartesianProduct (std::set<std::string> &one, std::set<std::string> &two) {
std::set<pairT> returnSet(PairCmp);
/.../
我从最后一行代码中得到了错误:
C2664“无法将参数1从int转换为const std :: less ...等等,等等,等等。
关于我为什么要踢屁股的任何建议?
最佳答案
使用对象(而不是指针)要求您为std::set
命名第二个模板参数,用于比较pairT
的两个对象。有关示例,请参见std::less<>
。
另外,您在这里尝试的事情似乎是错误的。您试图在std::set
中返回一个CartesianProduct()
,但是返回的PairCmp()
返回一个整数。