如何在迭代器上编写一个简单的包装器?

时间:2016-05-24 02:57:13

标签: c++ stl iterator

我正在编写一个类来使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];
 }

在容器的迭代器上实现包装器的最简单方法是什么?

0 个答案:

没有答案