задача: в массиве найти первое повторяющееся значение.
#include <set>
#include <iostream>
#include <windows.h>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int *arr = new int[3000000];
for (int i = 0; i < 3000000; i++)
{
if (i == 1000000)
{
arr[i] = i - 1;
continue;
}
arr[i] = i;
}
set<int>*uinarr = new set<int>();
size_t set_size = 0;
DWORD start = ::GetTickCount();
for (int j = 0; j < 3000000; j++)
{
//вариант №1
/*if (uinarr->find(arr[j]) != uinarr->end())
{
cout<<set_size<<"; "<<arr[j]<<endl;
break;
}
uinarr->insert(arr[j]);*/
//вариант №2
uinarr->insert(arr[j]);
if (set_size == uinarr->size())
{
cout<<set_size<<"; "<<arr[j]<<endl;
break;
}
set_size = uinarr->size();
}
DWORD stop = ::GetTickCount() - start;
cout<<"time:"<<stop<<endl;
delete uinarr;
delete []arr;
system("pause");
return 0;
}
1-й вариант ~2125 мс
2-й вариант ~1096 мс
почему 1-й вариант работает медленней?
Параллельный вопрос: как ускорить удаление std::set ? предварительное set::clear() ускорения не дает