cpp中用仿函数自定义map容器中排序规则时,当传入的参数为pair类型时,用pair的对象.first或者.second进行比较会编译不通过,而使用了将仿函数的参数改为两个int的类型却能正常编译通过,这是为什么?

cpp中用仿函数自定义map容器中排序规则
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- 牛马不分 2022-12-21 15:08关注
从源码入手看:
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单一项本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报