C++:放置到包含std::互斥锁的std::无序Map值

3wabscal  于 2022-12-24  发布在  其他
关注(0)|答案(1)|浏览(267)

你能不能,请,帮我找出正确的语法,如何emplace到一个std::unordered_map的值包含一个std::mutex
下面是一个例子:

#include <mutex>
#include <unordered_map>

using SubMap = std::unordered_map<int, float>;
struct MutexedSubMap{ std::mutex mutex; SubMap subMap; };
std::unordered_map<int, MutexedSubMap> m;

// The following do not work:
// m.emplace(7, MutexedSubMap{});
// m.emplace(7);
// m.emplace(7, {});
mwg9r5ms

mwg9r5ms1#

emplace将参数转发给构造函数。您可以为MutexedSubMap编写构造函数:

#include <mutex>
#include <unordered_map>

using SubMap = std::unordered_map<int, float>;
struct MutexedSubMap{ SubMap subMap; std::mutex mutex; MutexedSubMap(const SubMap& sm): subMap(sm){} };
std::unordered_map<int, MutexedSubMap> m;

int main() {
    m.emplace(7, SubMap{});
}

请注意,m[7];将具有相同的效果。

相关问题