如何将地图作为不可变地图传递?

问题描述 投票:0回答:2

我的map定义如下:

typedef std::map<AsnIdentifier, AsnValue, AsnComparator> MibMap;

我有一个这样的映射,我想将其传递给另一个函数,使得传递给它的函数不能修改它。

void someFunc() {
   MibMap someMap = GetMibMap();
   otherFunc(someMap);
}

[otherFunc的签名对于不变​​性可以如下:

void otherFunc(const MibMap& someMap);

但是只要使用地图的find函数,我会得到一个非常冗长的编译错误。

void otherFunc(const MibMap& someMap) {
   MibMap::iterator findVal = someMap.find(//pass the key to find);  //this does not compile
}

我从方法签名中删除const后,编译错误就消失了。是什么原因呢?我想保持地图不可修改,但同时我不确定该编译错误。

Edit:编译错误如下:

no suitable user-defined conversion from "std::_Tree_const_iterator... (and a whole long list)
c++ visual-c++ maps
2个回答
1
投票

[如果查看合适的reference documentation for std::map::find,您将看到它具有两个重载,其不同之处在于1.隐式std::map::find参数的const限定,以及2.返回类型:

this

从这里开始,您的问题应该很明显:您要调用iterator find( const Key& key ); const_iterator find( const Key& key ) const; 限定的const,但是您正在尝试将其结果转换为find。将MibMap::iterator的类型更改为findVal(或仅使用const_iterator),它将起作用。

© www.soinside.com 2019 - 2024. All rights reserved.