我编写了一个排序类来对multimap进行排序,但是当我将元素插入到map中时,会出现以下编译器错误:
1>c:\program files\microsoft visual studio 9.0\vc\include\xutility(313) : error C2664: 'bool MapSort::operator ()(std::pair<_Ty1,_Ty2> &,std::pair<_Ty1,_Ty2> &)' : cannot convert parameter 1 from 'const std::pair<_Ty1,_Ty2>' to 'std::pair<_Ty1,_Ty2> &'
任何人都可以帮忙吗?
class MapSort
{
public:
MapSort();
~MapSort();
public:
bool operator() ( pair<T,T>& i, pair<T,T>& j)
{
return i.first.GetID() < j.first.GetID();
}
};
multimap < pair < T,T >,P > CurrMap;
CurrMap.insert( multimap < pair < T, T >,Metric >::value_type(make_pair< T,T >(aAttractionA,aAttractionB),CurrP))
//
答案 0 :(得分:1)
pair<T,T>& i and pair<T,T>& j
应该是
pair<T,T> const& i and pair<T,T> const& j
(参考)
答案 1 :(得分:0)
您忘记了const
- 正确性:
bool operator()(pair<T,T> const& i, pair<T,T> const& j) const
{
return i.first.GetID() < j.first.GetID();
}
此函数中的任何内容都不需要是可变的,因此“为什么不”使函数及其输入const
?
事实上,根据容器的合约,这是预期的。
此外,我不确定您自己的排序顺序是否有效或有意义。这当然不是完全有目的的。 pair<T,T>
已经自然排序:如果有的话,您的类型bool operator<
可能会T
。
答案 2 :(得分:0)
您的排序谓词必须采用const
个引用。
另外,多地图是否已经排序?