Включая «набор» внутри «структуры» - PullRequest
0 голосов
/ 24 октября 2011

Я пытаюсь включить набор внутри структуры, но я не знаю, как передать функцию сравнения обратного вызова в конструктор набора при этом.

Это базовый пример того, что я пробовал:

struct pointT { 
    int x; 
    int y; 
};

struct pathT{
    Stack<pointT> pointsInPath;
    Set<pointT> pointsIncluded; // need callback here?
};

// Tried this.
//struct pathT{
    //Stack<pointT> pointsInPath;
    //Set<pointT> pointsIncluded(ComparePoints); //doesn't work of course
//};


//Callback function to compare set of points.
int ComparePoints(pointT firstPoint, pointT secondPoint){

    if (firstPoint.x == secondPoint.x && firstPoint.y == secondPoint.y) return 0;
    if (firstPoint.x < secondPoint.x) return -1;
    else return 1;
}


int main() {

    Set<pointT> setOfPoints(ComparePoints); // this works fine
    //pathT allPaths; // not sure how to assign call back function here to a set inside a struct

    return 0;
}

Ответы [ 2 ]

4 голосов
/ 24 октября 2011

Используйте пользовательский конструктор по умолчанию:

struct pathT{
    Stack<pointT> pointsInPath;
    Set<pointT> pointsIncluded; // need callback here?

    pathT() : pointsIncluded(ComparePoints) { }
};

Пока вы это делаете, переместите компаратор в структуру (которая может быть встроенной, в отличие от указателя функции) и определите ее как < оператор, который set ожидает:

struct ComparePoints {
    bool operator()(const pointT& a, const pointT& b){
        return a.x < b.x || (a.x == b.x && a.y < b.y);
    }
};

struct pathT {
    ...
    pathT() : pointsIncluded(ComparePoints()) { }
};
1 голос
/ 24 октября 2011

Ваша структура в c ++ автоматически становится классом.

, поэтому вы можете предоставить конструктор

struct pathT {
    public:
    pathT();

    private:
    Stack<pointT> pointsInPath;
    Set<pointT> pointsIncluded; 
};

pathT::pathT()
: pointsIncluded(ComparePoints)
{

}

regards

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