void getSortedResults(IteratorPtr<LookupResult<T> > pFindResultIter,
		DistanceCalculatorPtr<T> pDistanceCaculator,
		T pTarget,
		ElementWithDistances<T>& sortedResults) {

	pFindResultIter->toBegin();

	//Traverse iterator to get element and push to results vector
	while(!pFindResultIter->isDone()) {

#ifdef DENOISING
		if(pFindResultIter->getObj().m_distanceToTarget >= NOISE_THRESOLD) {
			sortedResults.push_back(pFindResultIter->getObj());
		}
#endif

		pFindResultIter->next();
	}

	//Wind-back the iterator for future purpose
	pFindResultIter->toBegin();
}
IteratorPtr<LookupResult<T> > ComposerBasedElementApproximator<T>::getFullResultIterator(IteratorPtr<LookupResult<T> > pResultIter,
		DistanceCalculatorPtr<T> pDistanceCalculator) {

	std::vector<LookupResult<T> > fullResults;

	if(pResultIter != NullPtr) {
		while(!pResultIter->isDone()) {
			LookupResult<T> resultObj = pResultIter->getObj();
			fullResults.push_back(resultObj);
			pResultIter->next();
		}
		pResultIter->toBegin();

		//Filter results before sort
		if(m_pLookupResultFilter != NullPtr) {
			m_pLookupResultFilter->filterLookupResults(fullResults, pDistanceCalculator, false);
		}

		std::sort(fullResults.begin(), fullResults.end(), DistanceComparator<T>());
	}
	return IteratorPtr<LookupResult<T> >(new VectorBasedReadOnlyIteratorImpl<LookupResult<T> >(fullResults));
}