#include "RenderItemMatcher.hpp" double RenderItemMatcher::computeMatching(const RenderItemList & lhs, const RenderItemList & rhs) const { for (int i = 0; i < lhs.size();i++) { int j; for (j = 0; j < rhs.size();j++) _weights[i][j] = _distanceFunction(lhs[i], rhs[j]); for (; j < lhs.size();j++) _weights[i][j] = RenderItemDistanceMetric::NOT_COMPARABLE_VALUE; } const double error = _hungarianMethod(_weights, lhs.size()); //std::cout << "[computeMatching] total error is " << error << std::endl; return error; } void RenderItemMatcher::setMatches (const RenderItemList & lhs_src, const RenderItemList & rhs_src) const { for (int i = 0; i < lhs_src.size();i++) { const int j = _hungarianMethod.matching(i); // hack if (true || _weights[i][j] == RenderItemDistanceMetric::NOT_COMPARABLE_VALUE) { _results.unmatchedLeft.push_back(lhs_src[i]); _results.unmatchedRight.push_back(rhs_src[i]); } else { _results.matches.push_back(std::make_pair(lhs_src[i], rhs_src[j])); } } }