Te wyniki, jak sądzę, są robione dla wersji
debug. Takie pomiary są mało wiarygodne, ponieważ wersja
debug jest z reguły dużo wolniejsza od wersji
release. Dla porównania czasy wczytywania 1'700'000 linii:
- debug - 72.6sek
- release - 8.7sek
Wersja
release jest 8x szybsza!
Niestety problem, i to poważny, jest w innym miejscu. Tym miejscem jest destruktor, a raczej metoda/algorytm odpowiedzialny za usuwanie elementów z set'a. W wersji
release usuwanie trwało 4.3 minuty, zatem wersja
debug prawdopodobnie usuwałaby prawie 35 min!

Porażka. Ktoś tu dał ciała.
Trzeba do problemu podejść z innej strony. Więc pytanie: co to za adresy, skąd one pochodzą, jak często się zmieniają itd.?