Optimizing iteration through linked lists
I haven't tested this solution, but I believe that your code could be simplified by using a reverse_iterator.

upperReferenceSet_.clear();
lowerReferenceSet_.clear();
for (int objective = 0; objective &lt; nObjectives_; ++objective)
{
    const  Real referenceValue = reference_-&gt;value(objective);
    const  Real  inserteeValue =  insertee_-&gt;value(objective);
    const bool lower = referenceValue &gt;= inserteeValue;
    Iterator it = referencePositions_[objective];
    if (!lower)
    {
        it = std::reverse_iterator&lt;Iterator&gt;(it);
    }
    ReferenceSet&amp; referenceSet = lower ? lowerReferenceSet_:
                                         upperReferenceSet_;

    do
    {
        referenceSet.insert(it-&gt;individual());
    } while (it++-&gt;value() != inserteeValue);

    lists_[objective].insert(--it, Node(insertee_, inserteeValue));
}