map作为const引用的问题

string generateCover(const vector<int>& v,  const map<int, string>& id_image)
{
	string cover;
	
	for (size_t i = 0; i < v.size(); i++)
	{
		if (id_image.count(v[i]))
		{
			cover.append(id_image[v[i]]);
		}

		if (i != v.size() - 1)
		{
			cover.append(",");
		}
	}

	return cover;
}

编译时提示

错误 1 error C2678: 二进制“[”: 没有找到接受“const std::map<int,std::string,std::less<_Kty>,std::allocator<std::pair<const _Kty,_Ty>>>”类型的左操作数的运算符(或没有可接受的转换) d:\program\vs2013\oj\oj\oj.cpp 18 1 OJ
 2 IntelliSense:  没有与这些操作数匹配的 "[]" 运算符
            操作数类型为:  const std::map<int, std::string, std::less<int>, std::allocator<std::pair<const int, std::string>>> [ const int ] d:\program\vs2013\OJ\OJ\oj.cpp 18 25 OJ
是因为简单来说,map的[]运算符会在索引项不存在的时候自动创建一个对象,有可能会改变map本身,所以不能够用在一个const map上。

替换成迭代器形式,代码如下:

string generateCover(const vector<int>& v,  const map<int, string>& id_image)
{
	string cover;

	for (size_t i = 0; i < v.size(); i++)
	{
		map<int, string>::const_iterator it = id_image.find(v[i]);
		if (it != id_image.end())
        {
            cover += it->second;
        }

		if (i != v.size() - 1)
		{
			cover.append(",");
		}
	}

	return cover;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kgduu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值