是的,您应该在结构上实现以下构造函数。
最重要的是原子是不可移动的,所以你需要复制
演示:
https://godbolt.org/z/hh65aE1TY
#include <atomic>
#include <string>
#include <concurrent_unordered_map.h>
struct LexemData final
{
LexemData(unsigned int i, std::size_t count) :
id{i},
counter{count}
{
}
LexemData(const LexemData& rhs) :
id { rhs.id },
counter {rhs.counter.load() }
{
}
LexemData& operator=(const LexemData& rhs)
{
if ( &rhs != this)
{
id = rhs.id;
counter = rhs.counter.load();
}
}
LexemData(LexemData&&) = delete;
LexemData& operator=(LexemData&&) = delete;
~LexemData() = default;
unsigned int id;
std::atomic<std::size_t> counter;
};
int main()
{
Concurrency::concurrent_unordered_map<std::string, LexemData> dict;
dict.insert({"lexem",{0u,0}});
}