Подход стандартной библиотеки C ++ к удалению одного из пары элементов в списке, удовлетворяющих критерию

Представьте, что у вас есть std :: list с набором значений в нем. Для демонстрации мы скажем, что это просто std :: list , но в моем случае это на самом деле двумерные точки. В любом случае, я хочу удалить одну из пары int s (или точек), которые удовлетворяют некоторому критерию расстояния. Мой вопрос заключается в том, как подойти к этому как к итерации, которая не выполняет больше операций O (N ^ 2).

Пример

Источник - это список int s, содержащий:

{16, 2, 5, 10, 15, 1, 20}

Если бы я дал этому критерию расстояния из 1 (т.е. ни один элемент в списке не должен находиться в пределах 1 других), я хотел бы получить следующий результат:

{16, 2, 5, 10, 20} , если я повторял вперед или

{20, 1, 15, 10, 5} , если я повторял в обратном направлении

, я чувствую, что должен быть какой-то отличный способ сделать это, но я застрял в этом двойном цикле итераторов и пытаюсь стереть элементы во время итерации по списку.

6
задан aardvarkk 10 November 2011 в 20:05
поделиться