簡體   English   中英

在 map 中快速設置值超出范圍 C++

[英]Quickly set values in map over range C++

我需要將 map 中的所有值設置在(0,N)false的范圍內。 當我簡單地遍歷范圍並設置值時,它相當慢,下面的示例大約需要 300 微秒。

#include <map>

std::map<int, bool> mp;
int N = 600;

for (int i = 0; i < N; i++) {
    mp[i] = false;
}

有沒有更快的方法來做到這一點?

下面的版本利用了您可以並行執行此操作的事實。 async在單獨的線程中執行任務(另見啟動策略)。

順序方法耗時 0.016s,並行方法耗時 0.006s。

#include <vector>
#include <map>
#include <memory>
#include <future>

// end exclusive
void set_m(int begin, int end, std::shared_ptr<std::map<int, bool>> mp)
{
    for (int i = begin; i < end; i++)
    {
        mp->insert({i, false});
    }
}

int main()
{
    auto mp = std::make_shared<std::map<int, bool>>();
    // takes 0m0.016s
    set_m(0, 6000 + 1, mp);

    // takes 0m0.006s
    std::vector<std::future<void>> v;
    for (int i = 0; i < 6000; i += 1000)
    {
        v.push_back(std::async(set_m, i, i + 1001, mp));
    }
    for (std::future<void> &a : v)
    {
        a.wait();
    }
    return 0;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM