C++ STL 中 map 的自定义比较函数

   对于 STL 中的 map,我们经常使用时,key_type 经常是基本类型,因此编译器自带比较函数可以比较元素大小,从而建立红黑树,但是如果使用自定义的 key  类型,比如类指针,结构体等,由于没有现成的比较函数,因此一般无法建立合适的 map,这时我们需要根据自己程序的需求设定 key 的比较函数。

  STL 中 map 的定义如下:

  template < class Key, class T, class Compare = less<Key>,class Allocator = allocator<pair<const Key,T> > > class map

  其中第三个参数便是比较函数,一般有两种比较常用的方法:


  (一)

  定义一个全局的比较函数对象,比如:

 
1 class comp
2 {
3 public:
4     bool operator() (const your_type &a , const your_type  &b) const
5     {
6         return a.data b.data < 0;
7     }
8 };
 
  需要注意的是,只需要重载()操作符就行了。
 
  (二)

  在自定义的类中重载<操作符:


 
1 class your_class
2 {
3 public:
4     int data;
5     bool operator < (const your_class &b) const
6     {
7         return (data b.data < 0);
8     }
9 };

  同样,STL 中的  sort,set 等采用的自定义比较函数可以按照上面的写。

  对于复杂的比较函数,请参考比较三原则

发表评论

电子邮件地址不会被公开。 必填项已用*标注