按值排序std :: unordered_map <std :: string,std :: atomic <unsigned int >>

gal*_*h92 1 c++ c++17

我有std::unordered_map<std::string, std::atomic<unsigned int>>.

我想打印键和值,按值排序.
我遇到的最好的解决方案是创建一个对矢量并对其进行排序

但是,由于无法复制std::atomic<unsigned int>,最有效的解决方案是什么?

das*_*ght 5

将数据副本复制到向量中会起作用,但是您需要提供一个自定义操作来调用load()您的数据atomic<unsigned> 以使其变得简单unsigned.既然你不得不这样做,你也可以颠倒对中的术语顺序:

std::vector<pair<unsigned int,std::string>> copy;
std::transform(
    m.begin()
,   m.end()
,   back_inserter(copy)
,   [](const pair<const std::string, std::atomic<unsigned int>>& p) {
        return make_pair(p.second.load(), p.first);
    }
);
Run Code Online (Sandbox Code Playgroud)

现在该值是第一个,调用std::sort不再需要自定义比较器:

std::sort(copy.begin(), copy.end());
Run Code Online (Sandbox Code Playgroud)

演示.