我正在编写一个类来使stl map线程安全。由于我们仅使用stl映射的一组有限特性,因此该类实现如下:
template<typename key, typename val>
class ts_map {
private:
std::map<key, val> hash_map;
std::mutex mtx;
public:
void insert(const key &k, const val &v);
val& operator[](const key &k);
};
template<typename key, typename val>
void ts_map<key, val>::insert(const key &k, const val &v)
{
mtx.lock();
hash_map.insert(std::make_pair(k, v));
mtx.unlock();
}
Template<typename key, typename val>
val& ts_map<key, val>::operator[](const key &k)
{
val ret;
mtx.lock();
assert(hash_map.find(k) != hash_map.end());
ret = hash_map[k];
mtx.unlock();
return ret;
}
由于密钥可能不在地图中,我们希望实现 在我们的线程安全映射中查找(const key&amp; k)和end()方法,以查找是否存在密钥。
if (my_map.find(key) == my_map.end()) {
// do something
} else {
auto &v = my_map[key];
}
在容器的迭代器上实现包装器的最简单方法是什么?