我不知道我做错了什么,但我有一张地图:
std::map<std::pair<ID, ID>, std::queue<Datum>> readQueues;
一切都很好,直到我调用readQueues[std::make_pair(src, dst)];
,然后我得到一个错误,我的参数与函数的参数不匹配。有趣的是,整个事情与std::map::find
和map::at
一起使用完全相同的论点......任何想法?
答案 0 :(得分:4)
map
的下标 - 运算符不能用于const
映射(或者对于该问题的const引用)。那是因为它实际上可能会改变map
- 回想起
m[a] = 7;
即使a
中没有m
,也会有效。在这种情况下,a
首先插入m
。因此,语义涉及潜在的修改,这正是const
成员函数不应该做的事情。
您可以使用find
来返回迭代器。特别是,当传递的密钥尚未包含时,find
将返回end()
。
答案 1 :(得分:2)
operator[]
不是const
,因此当您对地图只有const引用时,不能使用它,与find
和at
不同。