PartitionList *AbstractSet::getOptimalPartitionList (double threshold) { PartitionList *partitionList = new PartitionList(); Partition *minPartition = getOptimalPartition(objective->getParameter(0)); Partition *maxPartition = getOptimalPartition(objective->getParameter(1)); partitionList->push_back(minPartition); addOptimalPartitionList(partitionList,minPartition,maxPartition,0,1,threshold); partitionList->push_back(maxPartition); Partition *currentPartition; bool first = true; for (PartitionList::iterator it = partitionList->begin(); it != partitionList->end(); ) { Partition *newPartition = *it; if (first) { currentPartition = newPartition; first = false; ++it; } else { if (!newPartition->equal(currentPartition)) { currentPartition = newPartition; ++it; } else { partitionList->erase(it++); delete newPartition; } } } return partitionList; }