Ошибка в объявлении пользовательского набора структур - PullRequest
0 голосов
/ 05 февраля 2012

Я получаю странную ошибку компилятора, и, поскольку я новичок в использовании 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 ... бла, бла, бла.

Какие-нибудь предложения относительно того, почему меня пинают в задницу?

1 Ответ

1 голос
/ 05 февраля 2012

Для использования объектов (вместо указателей) необходимо указать второй параметр шаблона для std::set, который используется для сравнения двух объектов pairT. См. std::less<> для примера.

Кроме того, то, что вы пытаетесь здесь, кажется неправильным. Вы пытаетесь вернуть std::set в CartesianProduct(), но возвращенный PairCmp() возвращает целое число.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...