我遇到了一个奇怪的编译器错误,因为我刚接触使用自定义结构的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 ... blah,blah,blah。
有关为什么我的屁股被踢的任何建议?
答案 0 :(得分:1)
使用对象(而不是指针)要求您为std::set
命名第二个模板参数,用于比较pairT
的两个对象。有关示例,请参阅std::less<>
。
另外,你在这里尝试的似乎是错的。您尝试在std::set
中返回CartesianProduct()
,但返回的PairCmp()
会返回一个整数。