我收到一个奇怪的编译器错误,并且由于我刚开始使用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()返回一个整数。

08-25 10:37
查看更多