std :: map :: operator []表现得很奇怪

时间:2014-11-26 19:43:49

标签: c++ map stl

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

std::map<std::pair<ID, ID>, std::queue<Datum>> readQueues;

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

2 个答案:

答案 0 :(得分:4)

map的下标 - 运算符不能用于const映射(或者对于该问题的const引用)。那是因为它实际上可能会改变map - 回想起

m[a] = 7;
即使a中没有m

也会有效。在这种情况下,a首先插入m。因此,语义涉及潜在的修改,这正是const成员函数不应该做的事情。

您可以使用find来返回迭代器。特别是,当传递的密钥尚未包含时,find将返回end()

答案 1 :(得分:2)

operator[]不是const,因此当您对地图只有const引用时,不能使用它,与findat不同。