我只能使用 C++98 并且无法访问std::map::at()
C++11 添加的实现。
我的目标是编写一个at()
行为类似于std::map::at()
.
因此,我编写了以下非成员函数:
template<typename K, typename V>
V& at(std::map<K, V> map, K key)
{
if (map.find(key) == map.end())
throw std::out_of_range("key not found");
return map.find(key)->second;
}
我至少可以看到一个问题,即我的版本表现得好像我返回了一份副本(见下文)。
std::map<int,int> myMap;
myMap.insert(std::pair<int,int>(2,43));
// myMap.at(2)=44; // modifies the reference
// assert(44==myMap.at(2)); // fine
at(myMap,2)=44; // does not modify the value inside the map, why?
assert(44==myMap.at(2)); // not fine
- 我该如何解决这个问题?
- 我的包装还有其他问题吗?