Удаление дубликатов из 100 тысяч идентификаторов работает полминуты
std::vector<uint64_t> unique;
for (uint64_t id : ids) { // 100 тыс. элементов
if (std::find(unique.begin(), unique.end(), id) == unique.end()) {
unique.push_back(id);
}
}
Порядок первого появления важен. На 1000 элементов код работал мгновенно, на 100 тысячах — десятки секунд. Как ускорить?
- Проверять виденные id через unordered_set
- Сделать unique.reserve(ids.size()) заранее
- Заменить std::find на ручной цикл for
- Собрать программу с флагом -O3
