//C++20
#include <iostream>
#include <random>
#include <chrono>
#include <unordered_map>
int main()
{
size_t count=10'000'000u;
//генерим в пределах, сопоставимых с количеством
std::mt19937 gen(std::random_device{}());
std::uniform_int_distribution<unsigned int> dis(0u,count);
std::vector<int> v;
v.reserve(count);
for(size_t i=0; i<count; ++i)
{
v.push_back(dis(gen));
}
auto t1=std::chrono::steady_clock::now();
//для алгоритма не нужно, это для отображения результирующего количества
size_t numbers_to_show{};
//сюда копим строку с числами
std::string s;
s.reserve(1024);
//блок нужен, так как вызов деструктора мапы
//тоже должен попасть в измерение
{
std::unordered_map<int, size_t> map;
map.reserve(count);
for(auto val : v){++map[val];}
for(auto val : v)
{
if(map[val]==1)
{
s.append(std::to_string(val)).append(",");
++numbers_to_show;
}
}
}
auto t2=std::chrono::steady_clock::now();
//вывод чисел на экран отключил
//std::cout << s << '\n';
std::cout <<"numbers to show: "<< numbers_to_show<<'\n';
std::cout <<"time = "<< std::chrono::duration_cast<std::chrono::duration<double,std::milli>>(t2-t1)<<'\n';
}