public MetricSet<E> search(E e, Metric<? super E> m) {
        int leastDistance = Integer.MAX_VALUE;

        for (E elem : this) {
            leastDistance = Math.min(leastDistance, m.distance(elem, e));
        }

        MetricSet<E> newSet = new MetricSet<E>();

        for (E elem : this) {
            if (m.distance(elem, e) == leastDistance)
                newSet.add(elem);
        }

        return newSet;
    }