Foa*_*aly 1 c++ stl unordered-map reference c++11
我有以下问题.我有一个std::unordered_map包含对象作为值.现在我想修改我之前插入的对象.
class Point
{
public:
Point(float _x, float _y) : x(_x), y(_y) {}
float x;
float y;
};
Run Code Online (Sandbox Code Playgroud)
std::unordered_map<int, Point> points;
// ... add some values to it ...
points[1].x = 20.f; // error?
Run Code Online (Sandbox Code Playgroud)
我得到一个奇怪的长编译错误关于点不能默认构造.我理解它的方式operator []返回对映射类型(也就是值)的引用,那么为什么我不能修改它?
如果键不在地图中,operator []则需要创建一个.表达方式
points[1]
Run Code Online (Sandbox Code Playgroud)
需要能够Point在查找失败的情况下默认插入a (无论是否发生查找失败 - 这是编译时要求而不是运行时检查).Point因为Point不是默认的可构造性,所以不能满足该要求.因此编译错误.如果要使用unordered_map::operator[],则需要添加默认构造函数.
如果构造的默认值Point对您的使用没有意义 - 那么您根本无法使用operator[]并且必须find始终使用(或者at()如果您对例外情况没有问题):
auto it = points.find(1);
if (it != points.end()) {
it->second.x = 20.f;
}
points.at(1).x = 20.f; // can throw
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2567 次 |
| 最近记录: |