【发布时间】:2017-09-04 01:47:00
【问题描述】:
我想创建一个unordered_map 的<string, atomic<int>>。我将使用它来增加(fetch_add)、存储或加载基于字符串(键)的原子值。例如,假设我有 10 个原子整数计数器,但我只想获取 4 或它们的值。我想要一个看起来像这样的unordered_map:
unordered_map<string, atomic<int>> myValues = {
{"first", atomic<int>(0)},
{"second", atomic<int>(0)}, ... the last key being "tenth"}
};
然后说我有一个字符串向量
vector<string> wanted = {"first", "third", "tenth"};
我想做以下事情:
for (auto want: wanted) {
cout << myValues[want].load() << endl;
这应该打印出想要的键的值。
我可以这样做吗?如果我尝试像上面那样创建映射,我会收到错误消息,指出 atomic 的赋值运算符被删除?有没有办法做到这一点?
【问题讨论】:
-
atomic类型既不可复制也不可移动 -
这意味着我的方法是 DOA?有没有不同的方法来完成同样的事情?
-
您可以单独定义初始化数据,然后在地图中循环遍历它和
emplace,而不是尝试复制atomic值。 -
@Alf,你能给我举个简单的例子吗?
标签: c++ c++11 atomic unordered-map