c++におけるmapのfindとcount性能の比較
3778 ワード
{
using namespace std::chrono;
std::map nummap1;
{
std::cout << "build one map time:";
auto start = high_resolution_clock::now();
for (size_t i = 0; i < 100000; i++)
{
nummap1[i] = i + 1;
}
auto site1 = high_resolution_clock::now();
std::cout << duration_cast(site1 - start).count() << " nanoseconds passed!" << std::endl;
}
std::map nummap2;
{
std::cout << "build two map time:";
auto start = high_resolution_clock::now();
for (size_t i = 0; i < 100000; i++)
{
nummap2[i] = i + 1;
}
auto site1 = high_resolution_clock::now();
std::cout << duration_cast(site1 - start).count() << " nanoseconds passed!" << std::endl << std::endl;
}
{
std::cout << "find one map time:";
auto start = high_resolution_clock::now();
for (size_t i = 0; i < 100000; i++)
{
nummap1.find(i);
}
auto site1 = high_resolution_clock::now();
std::cout << duration_cast(site1 - start).count() << " nanoseconds passed!" << std::endl;
}
{
std::cout << "count one map time:";
auto start = high_resolution_clock::now();
for (size_t i = 0; i < 100000; i++)
{
nummap2.count(i);
}
auto site1 = high_resolution_clock::now();
std::cout << duration_cast(site1 - start).count() << " nanoseconds passed!" << std::endl << std::endl;
}
{
std::cout << "find one map time:";
auto start = high_resolution_clock::now();
for (size_t i = 0; i < 100000; i++)
{
auto it = nummap1.find(i);
if (it != nummap1.end());
}
auto site1 = high_resolution_clock::now();
std::cout << duration_cast(site1 - start).count() << " nanoseconds passed!" << std::endl;
}
{
std::cout << "count one map time:";
auto start = high_resolution_clock::now();
for (size_t i = 0; i < 100000; i++)
{
auto it = nummap2.count(i);
if (it != 0);
}
auto site1 = high_resolution_clock::now();
std::cout << duration_cast(site1 - start).count() << " nanoseconds passed!" << std::endl << std::endl;
}
{
std::cout << "find one map time:";
auto start = high_resolution_clock::now();
for (size_t i = 0; i < 100000; i++)
{
auto it = nummap1.find(i);
if (it != nummap1.end())
{
auto val = it->second;
}
}
auto site1 = high_resolution_clock::now();
std::cout << duration_cast(site1 - start).count() << " nanoseconds passed!" << std::endl;
}
{
std::cout << "count one map time:";
auto start = high_resolution_clock::now();
for (size_t i = 0; i < 100000; i++)
{
auto it = nummap2.count(i);
if (it != 0)
{
auto val = nummap2.at(i);
}
}
auto site1 = high_resolution_clock::now();
std::cout << duration_cast(site1 - start).count() << " nanoseconds passed!" << std::endl;
}
}
実行結果:
build one map time:1933090922 nanoseconds passed! build two map time:1913304601 nanoseconds passed!
find one map time:726226943 nanoseconds passed! count one map time:1254866463 nanoseconds passed!
find one map time:820331007 nanoseconds passed! count one map time:1255967332 nanoseconds passed!
find one map time:794207291 nanoseconds passed! count one map time:1983391057 nanoseconds passed!