C ++ const-ness,Boost无序映射,operator []

时间:2013-07-06 17:29:57

标签: c++ boost const

我希望这个问题在没有看到代码的情况下是可以回答的,因为我不清楚问题所在。我在Boost无序映射上使用operator[]来查找键并返回它映射到的向量。这是在赋值语句的RHS上,但我得到的错误似乎暗示operator[]不保证constness。我刚刚开始尝试学习const - 正确性。有人可以解码此错误并指导我解决问题是什么?或者询问更多细节?

编译器 Apple LLVM版本4.2(clang-425.0.28)

Block.cpp:89:39: error: no viable overloaded operator[] for type 'const Record_map' (aka 'const unordered_map<Typecode, FV_pair_vec>')
    FV_pair_vec const fv_vec = records[rec_type];
                               ~~~~~~~^~~~~~~~~
/usr/local/include/boost/unordered/unordered_map.hpp:420:22: note: candidate function not viable: 'this' argument has type 'const Record_map'
      (aka 'const unordered_map<Typecode, FV_pair_vec>'), but method is not marked const
        mapped_type& operator[](const key_type&);
                     ^

1 个答案:

答案 0 :(得分:3)

问题是有问题的运算符不是const,也就是说,无法在const个对象上调用它,或者通过const引用调用它。提供const版本的替代方法是at(key_type const&),如果具有该关键元素的元素不在地图中,则会引发异常。所以你可以使用

mapped_type x = theMap.at(theKey);

而不是

mapped_type x = theMap[theKey];

否则,请使用unordered_map::find(key_type const&)方法。