std::map::operator[] 行为异常

lig*_*ulb 0 c++ stl map

我不知道我做错了什么,但我有一张地图:

std::map<std::pair<ID, ID>, std::queue<Datum>> readQueues;
Run Code Online (Sandbox Code Playgroud)

一切都很好,直到我打电话readQueues[std::make_pair(src, dst)];,然后我得到一个错误,我的参数与函数的参数不匹配。有趣的是,整个事情的作品与std::map::findmap::at使用完全相同的参数...任何想法?

Col*_*mbo 5

的下标运算符map不能用于const映射(或就此而言对映射的常量引用)。那是因为它实际上可能会改变map- 回想一下

m[a] = 7;
Run Code Online (Sandbox Code Playgroud)

即使a不存在于m. 在这种情况下am首先插入到。因此语义涉及潜在的修改,而这正是const成员函数不应该做的。

您可以改为使用findwhich 将返回一个迭代器。特别是,当传递的键尚未包含时find返回end()