【发布时间】:2015-05-14 06:34:37
【问题描述】:
我试图将 remove_if 模板用于地图容器,但我收到模板参数的编译器错误。我无法理解为什么。
int main()
{
map<const int, int> intmap;
intmap[1] = 1;
intmap[2] = 2;
intmap[3] = 3;
intmap[4] = 4;
auto isOdd = [&](pair<const int, int> it)->bool
{ return static_cast<bool>(it.second % 2); };
isOdd(*(intmap.begin()));
remove_if(intmap.begin(), intmap.end(), isOdd);
}
此 remove_if 引发编译器错误。有什么建议可以解决吗?
错误信息是
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\utility(260) : error C2166: l-value specifies const object
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\utility(259) : while compiling class template member function
'std::pair<_Ty1,_Ty2> &std::pair<_Ty1,_Ty2>::operator =(std::pair<_Ty1,_Ty2> &&)'
with
[
_Ty1=const int,
_Ty2=int
]
maperaseif.cpp(29) : see reference to class template instantiation 'std::pair<_Ty1,_Ty2>' being compiled
with
[
_Ty1=const int,
_Ty2=int
]
【问题讨论】:
-
请清楚说明您遇到的错误。
-
remove_if最终会重新排序范围内的元素。map强制执行特定命令。因此 2 不兼容。细节只是在弄乱类型和const。