我有带有 std::map
template <typename T>
struct ProxyMap {
auto begin() { return m.begin(); }
auto end() { return m.end(); }
private:
std::map<size_t, T> m;
}
main () {
ProxyMap<int> pm;
pm[0] = -1;
pm[3] = 23;
pm[63] = 0;
for (auto c : pm) {
size_t a;
int b;
std::tie(a,b) = c;
std::cout << a << " " << b << "\n";
}
return 0;
}
我必须做什么才能很好地编译这个例子?我需要什么运算符或 mb 另一个函数,例如转换为类型??
我只是重新实现 begin() end() 方法
您的标题询问的是
operator=
,但该运算符并不是您的代码中缺少的内容。 要使代码编译,您需要实现 operator[]
,并让它调用 map::operator[]
,例如:
template <typename T>
struct ProxyMap {
auto begin() { return m.begin(); }
auto end() { return m.end(); }
T& operator[](size_t key) { return m[key]; } // <-- HERE
private:
std::map<size_t, T> m;
};
int main () {
ProxyMap<int> pm;
pm[0] = -1;
pm[3] = 23;
pm[63] = 0;
for (auto c : pm) {
size_t a;
int b;
std::tie(a,b) = c;
std::cout << a << " " << b << "\n";
}
return 0;
}