我正在看别人写的一些代码,试图修复错误,并有这个类型定义
typedef map<RPacket *, CLocalLink *, less<RPacket *> > CPacketToLocalLinkMap;
我不确定less<RPacket *>
在做什么
std::map
是类模板其第三个模板参数Compare
是一个比较函数,用于对键进行排序。第三个参数Compare
有一个默认参数std::less<Key>
。
因此,通过显式地写:我不知道这是怎么回事
在
less<RPacket *>
你的明确地说这个less<RPacket *>
应该被用作比较函数来排序键,而不是默认参数(在您的情况下与less<RPacket *>
相同)。
std::less
本身是一个类模板,用于执行比较,除非特化,否则在类型T
上调用operator<
。
template< class T = void > struct less; since C++14
如上所述,在您的情况下,不需要显式地传递less<RPacket*>
作为第三个参数,因为它与默认参数相同。这意味着你可以这样写:
//---------------------------------v------------------------>no need for the third template argument
typedef map<RPacket *, CLocalLink * > CPacketToLocalLinkMap; //this is equivalent to what you wrote