我有std::unordered_map<std::string, std::atomic<unsigned int>>.
我想打印键和值,按值排序.
我遇到的最好的解决方案是创建一个对矢量并对其进行排序
但是,由于无法复制std::atomic<unsigned int>,最有效的解决方案是什么?
将数据副本复制到向量中会起作用,但是您需要提供一个自定义操作来调用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)