C++stdmapunordered-創(chuàng)新互聯(lián)

C++ std map unordered_map hash_map 的查找性能測試代碼、過程及結(jié)果
  • 測試環(huán)境
  • 測試結(jié)果
  • 測試代碼
  • 測試過程記錄
    • 測試版本 RLEASE x64
    • 測試版本 Debug x64

創(chuàng)新互聯(lián)建站-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比新華網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式新華網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋新華地區(qū)。費(fèi)用合理售后完善,十年實(shí)體公司更值得信賴。測試環(huán)境

操作系統(tǒng): Windows11專業(yè)版
硬件環(huán)境:Intel i5-12500 3GHz 、16GB
IDE:VS2019

測試結(jié)果

Release模式下:
查找效率:unordered_map ≈ hash_map >map
std::map 的效率遠(yuǎn)小于 unordered_map 和 hash_map

Debug模式下:

  1. 查找效率:hash_map >unordered_map >map
  2. 隨著容量的增加,hash_map, unordered_map的查找效率有所降低,但浮動(dòng)不大畢竟是常量級別。map的效率直線下降。。。

詳細(xì)數(shù)據(jù)見本文下方的 測試過程記錄

測試代碼
#define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS
#include#include#include#include#includenamespace test_perf
{class TimeCostCounter
{public:
    explicit TimeCostCounter(const std::string& msg)
    {msg_ = new char[msg.size() + 1];
        strncpy_s(msg_, (msg.size() + 1), msg.c_str(), msg.size());
        start_ = std::chrono::system_clock::time_point(std::chrono::system_clock::now());

#if 0
        char output[512] = {0 };
        _snprintf_s(output, sizeof(output) - 1,
            "enter time_const:%-7s microseconds  %s\r\n", "---", msg_);
        std::fprintf(stdout, "%s", output);
#endif // 0
    }
    ~TimeCostCounter()
    {std::chrono::system_clock::time_point time_end = std::chrono::system_clock::now();
        auto time_cust_t = std::chrono::duration_cast(time_end - start_);
        int cost_time = time_cust_t.count();

        char output[512] = {0 };
        _snprintf_s(output, sizeof(output) - 1,
            "exit  time_const:%-7d microseconds  %s\r\n", cost_time, msg_);
        std::fprintf(stdout, "%s", output);

        delete msg_;
    }
    
private:
    std::chrono::system_clock::time_point start_;
    char* msg_ = nullptr;
};


// 測試函數(shù),
// size     :    map的實(shí)際大小
// times    :    查找的輪次,每一輪次都從0查找到size-1
void test(int size, int times)
{std::cout<< std::endl;
    std::cout<< "begin test, size:"<< size<< "  times:"<< times<< std::endl;

    std::mapm;
    std::unordered_map  um;
    std::hash_map   hm;

    // 初始化
    for (int i = 0; i< size; i++)
    {m[i] = i;
        um[i] = i;
        hm[i] = i;
    }

    int count_map = 0, count_unordered_map = 0, count_hash_map = 0;
    // map的查找
    {TimeCostCounter printer("test map");
        for (int i = 0; i< times; i++)
        {for (int j = 0; j< size; j++)
            {if (m.find(j) != m.end())
                {count_map++;
                }
            }
        }
        //std::cout<< "count:"<< count_map<< ", map:"<< std::endl;
    }


    // unordered_map的查找
    {TimeCostCounter printer("test unordered_map");
        for (int i = 0; i< times; i++)
        {for (int j = 0; j< size; j++)
            {if (um.find(j) != um.end())
                {count_unordered_map++;
                }
            }
        }
        //std::cout<< "count:"<< count_unordered_map<< ", unordered_map:"<< std::endl;
    }

    // hash_map的查找
    {TimeCostCounter printer("test hash_map");
        for (int i = 0; i< times; i++)
        {for (int j = 0; j< size; j++)
            {if (hm.find(j) != hm.end())
                {count_hash_map++;
                }
            }
        }
        //std::cout<< "count:"<< count_hash_map<< ", hash_map:"<< std::endl;
    }
    std::cout<< "count_map:"<< count_map<< "  count_unordered_map:"<< count_unordered_map<< "  count_hash_map:"<< count_hash_map<< std::endl;
}

int test_main()
{std::cout<< "test begin..."<< std::endl;

    test(10, 10000000);        // 容量:10         查找:1千萬輪次
    test(100, 1000000);        // 容量:100        查找:1百萬輪次
    test(1000, 100000);        // 容量:1000       查找:10萬輪次
    test(10000, 10000);        // 容量:10000      查找:1萬輪次
    test(100000, 1000);        // 容量:100000     查找:1000輪次
    test(1000000, 100);        // 容量:1000000    查找:100輪次
    test(10000000, 10);        // 容量:10000000   查找:10輪次

    std::cout<< "test finished"<< std::endl;

    return 0;
}
}  // namespace test_perf

int main()
{test_perf::test_main();

    int a = getchar();
    printf("a=%d", a);
    return 0;
}
測試過程記錄 測試版本 RLEASE x64

第一次測試

test begin...

begin test, size:10  times:10000000
exit  time_const:377538  microseconds  test map
exit  time_const:185946  microseconds  test unordered_map
exit  time_const:231577  microseconds  test hash_map
count_map:100000000  count_unordered_map:100000000  count_hash_map:100000000

begin test, size:100  times:1000000
exit  time_const:680158  microseconds  test map
exit  time_const:174351  microseconds  test unordered_map
exit  time_const:219366  microseconds  test hash_map
count_map:100000000  count_unordered_map:100000000  count_hash_map:100000000

begin test, size:1000  times:100000
exit  time_const:2456112 microseconds  test map
exit  time_const:193982  microseconds  test unordered_map
exit  time_const:216137  microseconds  test hash_map
count_map:100000000  count_unordered_map:100000000  count_hash_map:100000000

begin test, size:10000  times:10000
exit  time_const:3935452 microseconds  test map
exit  time_const:262153  microseconds  test unordered_map
exit  time_const:246536  microseconds  test hash_map
count_map:100000000  count_unordered_map:100000000  count_hash_map:100000000

begin test, size:100000  times:1000
exit  time_const:3874978 microseconds  test map
exit  time_const:451669  microseconds  test unordered_map
exit  time_const:397784  microseconds  test hash_map
count_map:100000000  count_unordered_map:100000000  count_hash_map:100000000

begin test, size:1000000  times:100
exit  time_const:5637420 microseconds  test map
exit  time_const:2033308 microseconds  test unordered_map
exit  time_const:1697859 microseconds  test hash_map
count_map:100000000  count_unordered_map:100000000  count_hash_map:100000000

begin test, size:10000000  times:10
exit  time_const:5980635 microseconds  test map
exit  time_const:2049441 microseconds  test unordered_map
exit  time_const:2335847 microseconds  test hash_map
count_map:100000000  count_unordered_map:100000000  count_hash_map:100000000
test finished

第二次測試

test begin...

begin test, size:10  times:10000000
exit  time_const:387035  microseconds  test map
exit  time_const:194017  microseconds  test unordered_map
exit  time_const:219453  microseconds  test hash_map
count_map:100000000  count_unordered_map:100000000  count_hash_map:100000000

begin test, size:100  times:1000000
exit  time_const:658199  microseconds  test map
exit  time_const:178675  microseconds  test unordered_map
exit  time_const:219622  microseconds  test hash_map
count_map:100000000  count_unordered_map:100000000  count_hash_map:100000000

begin test, size:1000  times:100000
exit  time_const:2367859 microseconds  test map
exit  time_const:186760  microseconds  test unordered_map
exit  time_const:229742  microseconds  test hash_map
count_map:100000000  count_unordered_map:100000000  count_hash_map:100000000

begin test, size:10000  times:10000
exit  time_const:3969829 microseconds  test map
exit  time_const:258913  microseconds  test unordered_map
exit  time_const:254943  microseconds  test hash_map
count_map:100000000  count_unordered_map:100000000  count_hash_map:100000000

begin test, size:100000  times:1000
exit  time_const:3835890 microseconds  test map
exit  time_const:523620  microseconds  test unordered_map
exit  time_const:403951  microseconds  test hash_map
count_map:100000000  count_unordered_map:100000000  count_hash_map:100000000

begin test, size:1000000  times:100
exit  time_const:5635731 microseconds  test map
exit  time_const:2144435 microseconds  test unordered_map
exit  time_const:1756355 microseconds  test hash_map
count_map:100000000  count_unordered_map:100000000  count_hash_map:100000000

begin test, size:10000000  times:10
exit  time_const:6138499 microseconds  test map
exit  time_const:2386299 microseconds  test unordered_map
exit  time_const:2600038 microseconds  test hash_map
count_map:100000000  count_unordered_map:100000000  count_hash_map:100000000
test finished

第三次測試

test begin...

begin test, size:10  times:10000000
exit  time_const:383793  microseconds  test map
exit  time_const:179461  microseconds  test unordered_map
exit  time_const:246965  microseconds  test hash_map
count_map:100000000  count_unordered_map:100000000  count_hash_map:100000000

begin test, size:100  times:1000000
exit  time_const:696714  microseconds  test map
exit  time_const:184956  microseconds  test unordered_map
exit  time_const:240162  microseconds  test hash_map
count_map:100000000  count_unordered_map:100000000  count_hash_map:100000000

begin test, size:1000  times:100000
exit  time_const:2417398 microseconds  test map
exit  time_const:224808  microseconds  test unordered_map
exit  time_const:225643  microseconds  test hash_map
count_map:100000000  count_unordered_map:100000000  count_hash_map:100000000

begin test, size:10000  times:10000
exit  time_const:4034813 microseconds  test map
exit  time_const:265107  microseconds  test unordered_map
exit  time_const:235180  microseconds  test hash_map
count_map:100000000  count_unordered_map:100000000  count_hash_map:100000000

begin test, size:100000  times:1000
exit  time_const:3983721 microseconds  test map
exit  time_const:593352  microseconds  test unordered_map
exit  time_const:478527  microseconds  test hash_map
count_map:100000000  count_unordered_map:100000000  count_hash_map:100000000

begin test, size:1000000  times:100
exit  time_const:5755605 microseconds  test map
exit  time_const:2157740 microseconds  test unordered_map
exit  time_const:1781829 microseconds  test hash_map
count_map:100000000  count_unordered_map:100000000  count_hash_map:100000000

begin test, size:10000000  times:10
exit  time_const:6350555 microseconds  test map
exit  time_const:2214270 microseconds  test unordered_map
exit  time_const:2407366 microseconds  test hash_map
count_map:100000000  count_unordered_map:100000000  count_hash_map:100000000
test finished
測試版本 Debug x64

第一次測試

test begin...

begin test, size:10  times:10000000
exit  time_const:77725513 microseconds  test map
exit  time_const:55867924 microseconds  test unordered_map
exit  time_const:50301682 microseconds  test hash_map
count_map:100000000  count_unordered_map:100000000  count_hash_map:100000000

begin test, size:100  times:1000000
exit  time_const:103791587 microseconds  test map
exit  time_const:57031541 microseconds  test unordered_map
exit  time_const:53823537 microseconds  test hash_map
count_map:100000000  count_unordered_map:100000000  count_hash_map:100000000

begin test, size:1000  times:100000
exit  time_const:116249684 microseconds  test map
exit  time_const:55005075 microseconds  test unordered_map
exit  time_const:52733354 microseconds  test hash_map
count_map:100000000  count_unordered_map:100000000  count_hash_map:100000000

begin test, size:10000  times:10000
exit  time_const:141760952 microseconds  test map
exit  time_const:60648988 microseconds  test unordered_map
exit  time_const:54216907 microseconds  test hash_map
count_map:100000000  count_unordered_map:100000000  count_hash_map:100000000

begin test, size:100000  times:1000
exit  time_const:164759336 microseconds  test map
exit  time_const:75498544 microseconds  test unordered_map
exit  time_const:66905100 microseconds  test hash_map
count_map:100000000  count_unordered_map:100000000  count_hash_map:100000000

begin test, size:1000000  times:100
exit  time_const:195118169 microseconds  test map
exit  time_const:76603801 microseconds  test unordered_map
exit  time_const:70866936 microseconds  test hash_map
count_map:100000000  count_unordered_map:100000000  count_hash_map:100000000

begin test, size:10000000  times:10
exit  time_const:223320650 microseconds  test map
exit  time_const:77281447 microseconds  test unordered_map
exit  time_const:73711380 microseconds  test hash_map
count_map:100000000  count_unordered_map:100000000  count_hash_map:100000000
test finished

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

名稱欄目:C++stdmapunordered-創(chuàng)新互聯(lián)
網(wǎng)頁網(wǎng)址:http://muchs.cn/article46/psgeg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google、網(wǎng)站設(shè)計(jì)、網(wǎng)站內(nèi)鏈、用戶體驗(yàn)做網(wǎng)站、營銷型網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)