Тут вам нужен обход в ширину и чуть-чуть структур данных, чтобы граф построить.
Чтобы не копировать кучу раз данные туда-сюда создайте один массив из треугольников. Потом заведите еще один массив int-ов для пометок, к какому мешу каждый из треугольников принадлежит. Вы его заполните и потом можно за один проход разложить треугольники по новым мешам.
Еще заведите массив списков длинной сколько у вас точек. Пройдитесь по каждому треугольнику и засуньте его номер в 3 списка для каждой из его вершин.
Ну, а дальше, Breadth-First-Search запускаете. Пройдитесь циклом по всем треугольникам, если он еще не помечен, запускаете BFS от него. Помечайте его новым номером, помещайте его номер в очередь, и циклом пока очередь не пуста, извлекаете из нее элемент. Смотрите 3 списка для трех вершин. Если треугольник оттуда еще не помечен, помечаете его текущим номером меша, кладете в очередь.
Еще для ускорения можно после просмотра списка треугольников для вершины отчищать его.
Альтернативный вариант - завести hash_map из пары вершин в номер треугольника. Пройдитесь по треугольникам, и для каждого ребра, если оно еще не помечено, кладите номер треугольника в map. Иначе текущий и второй треугольник связаны - добавьте каждый из них в список инцидентности для второго. В таком варианте у каждого труегольника будет три ребра в соседей по сторонам.
Только перед обращением к мапе точки сортируйте.