Я пишу обертку вокруг std :: unorered_map, но я немного не знаю, как я должен предоставить публичную функцию-член для доступа к итерации, предоставляемой функцией «:» в C++ 11, например:Предоставление оператора «:» для UDF std :: unordered_map?
//Iterate through all unoredered_map keys
for(auto x : my_map){
//Process each x
}
Как я могу предоставить такую же возможность, как и выше, через мою обертку вокруг unordered_map
?
Пробовал решение:
#include <unordered_map>
#include <mutex>
template<typename T, typename K>
class MyClass{
private:
std::unordered_map<T,K> map;
std::mutex mtx;
public:
MyClass(){}
MyClass<T,K>(const MyClass<T,K>& src){
//Going to lock the mutex
}
void insert(T key, K value){
mtx.lock();
map[T] = K;
mtx.unlock();
}
K operator[](T key) const
{
return map[key];
}
K get(T key){
return map[T];
}
decltype(map.cbegin()) begin() const
{
return map.begin();
}
decltype(map.cend()) end() const {
return map.end();
}
bool count(T key){
int result = false;
mtx.lock();
result = map.count(key);
mtx.unlock();
return result;
}
};
Использование lockguard вместо ручного '' lock' и unlock' – balki