bool operator==( Relation& relationA, Relation& relationB ) { // Check to see if name is the same if ( relationA.getName( ) != relationB.getName( ) ) { return false; } // Check for the same attributes if ( relationA.getAttributes( ) != relationB.getAttributes( ) ) { return false; } // Check for the same keys if ( relationA.getKeys( ) != relationB.getKeys( ) ) { return false; } // Check for number of rows if ( relationA.getNumTuples( ) != relationB.getNumTuples( ) ) { return false; } // Make sure each row exists in both relations for ( unsigned i = 0; i < relationB.getNumTuples( ); ++i ) { if ( !relationA.hasTuple( relationB.getRow( i ) ) ) { return false; } } return true; }
ExampleSet::ExampleSet(const Relation &relation) { size = relation.getNInstances(), inVars = 0, outVars = 0; // Calcula a quantidade de variáveis de entrada e saída que existirão for (const Attribute* attr : relation.getAttributes()) { uint inc = attr->isNumeric() ? 1 : attr->getNominalCard(); if (attr->isLast()) outVars += inc; else inVars += inc; } set(size, inVars, outVars); }