mam*_*don 1 c++ operator-overloading map operators
只是一个快速的语法问题.我正在写一个地图课(学校).
如果我定义以下运算符重载:
template<typename Key, typename Val> class Map {...
Val* operator[](Key k);
Run Code Online (Sandbox Code Playgroud)
当用户写道时会发生什么:
Map<int,int> myMap;
map[10] = 3;
Run Code Online (Sandbox Code Playgroud)
做类似的事情只会覆盖Key k处的[null]指针的临时副本.甚至可以这样做:
map[10] = 3;
printf("%i\n", map[10]);
Run Code Online (Sandbox Code Playgroud)
同一个运算符过载?
它的工作方式std::map是,如果键不存在,map类将插入一个默认值,然后返回一个左值(一个与键关联的值的可赋值引用),因此可以为它赋值一个新值.
因此,在下面的代码示例中,假设map为空,这将在地图中插入10并将其与值3关联.
map[10] = 3;
Run Code Online (Sandbox Code Playgroud)
使用自定义映射类时,operator[]应首先检查Key k是否存在,如果不存在,则在映射中插入新的键/值对(使用typename的默认构造函数Val).然后,您可以返回与新键关联的值的引用,以便用户可以为其分配值.请注意,这意味着Val必须是可分配的并且具有默认构造函数.
这允许operator[]用于插入和查找.您还应该重载一个const版本operator[],当然只支持查找.
编辑:我现在在你的代码中注意到你正在返回一个指针.如果要使用operator[]std :: map 使用的插入/查找范例,则返回引用更有意义.返回一个指针给你的优势是你可以检查operator[]for NULL 的返回值来检查密钥是否不存在,但同样,如果你想operator[]同时提供查找和插入功能,引用将是这里的方法.
| 归档时间: |
|
| 查看次数: |
740 次 |
| 最近记录: |