cpp中用仿函数自定义map容器中排序规则时,当传入的参数为pair类型时,用pair的对象.first或者.second进行比较会编译不通过,而使用了将仿函数的参数改为两个int的类型却能正常编译通过,这是为什么?
从源码入手看:
std::map中写入仿函数自定义排序规则,
template <class _Kty, class _Ty, class _Pr = less<_Kty>, class _Alloc = allocator<pair<const _Kty, _Ty>>>
class map : public _Tree<_Tmap_traits<_Kty, _Ty, _Pr, _Alloc, false>> {
...
using key_compare = _Pr;
...
template <class _Iter>
map(_Iter _First, _Iter _Last, const key_compare& _Pred) : _Mybase(_Pred) {
insert(_First, _Last);
}
很明显,传入的仿函数参数是key值规则,可以看key_compare的定义
而题主想要改的std::pair值则是std::map单一项