Clelele 2022-12-20 19:18 采纳率: 30.8%
浏览 31
已结题

cpp中用仿函数自定义map容器中排序规则

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

img

  • 写回答

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单一项

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月31日
  • 已采纳回答 12月23日
  • 修改了问题 12月20日
  • 创建了问题 12月20日