C++ STL map中的Key使用自定义类型

C++ STL 中的map容器中的元素是按照Key的升序进行排列的,所以map的Key需要使用自定义类型时,该自定义类型必须重载operator<操作符,否则会出现下面的编译错误:

 

  1. In file included from /usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/string:50,
  2.                  from /usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/bits/locale_classes.h:42,
  3.                  from /usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/bits/ios_base.h:43,
  4.                  from /usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/ios:43,
  5.                  from /usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/ostream:40,
  6.                  from /usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/iostream:40,
  7.                  from dagexing/src/online/dgxdbrpc/dgx_db.cc:2:
  8. /usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/bits/stl_function.h: In member function 'bool std::less<_Tp>::operator()(const _Tp&, const _Tp&) const [with _Tp = dgx_db::KtvRoomInfo]':
  9. /usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/bits/stl_map.h:449: instantiated from '_Tp& std::map<_Key, _Tp, _Compare, _Alloc>::operator[](const _Key&) [with _Key = dgx_db::KtvRoomInfo, _Tp = dgx_db::Uint32DataType, _Compare = std::less<dgx_db::KtvRoomInfo>, _Alloc = std::allocator<std::pair<const dgx_db::KtvRoomInfo, dgx_db::Uint32DataType> >]'
  10. ./dagexing/src/online/dgxdbrpc/dbcache.h:53: instantiated from 'int dgx_db::DbCache<KeyType, ValueType>::update(const KeyType&, ValueType&) [with KeyType = dgx_db::KtvRoomInfo, ValueType = dgx_db::Uint32DataType]'
  11. dagexing/src/online/dgxdbrpc/dgx_db.cc:136: instantiated from here
  12. /usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/bits/stl_function.h:230: error: no match for 'operator<' in '__x < __y'
这个错误表示_Key = dgx_db::KtvRoomInfo没有重载operator<操作符。加入下列重载函数后通过编译

 

  1. bool operator < (const KtvRoomInfo& info) const {
  2.     if (kiid_ < info.kiid_)
  3.       return true;
  4.     else if (kiid_ == info.kiid_ && enname_ < info.enname_)
  5.       return true;
  6.     else
  7.       return false;
  8.   }

 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值