C++ STL: map自定义键值类型

相关内容: C++ STL: unordered_map自定义键值类型

本文目录

1. map定义

map是STL里的一个模板类,用来存放<key, value>键值对的数据结构,它的定义如下。

template < class Key,                                   //map::key_tpe
           class T,                                     //map::mapped_type
           class Compare = less<Key>,                   //map::key_compare
           class Alloc = allocator<pair<const Key, T>>  //map::allocator_type
           > class map;
  • 第1个参数存储了key。

  • 第2个参数存储了mapped value。

  • 第3个参数是比较函数的函数对象。map用它来判断两个key的大小,并返回bool类型的结果。利用这个函数,map可以确定元素在容器中遵循的顺序以及两个元素键是否相等(!comp(a,b)&&!comp(b,a)),确保map中没有两个元素可以具有等效键。这里,它的默认值是less<Key>,定义如下。

    template <class T> 
    struct less {
         
      bool operator() (const T& x, const T& y) const {
         return x < y;}
      typedef T first_argument_type;
      typedef T second_argument_type;
      typedef bool result_type;
    };
    
  • 第4个参数是用来定义存储分配模型的。

2. 简单方法: 重载operator<()操作符

在我们插入<key, value>时,map会先通过比较函数地函数对象来比对key的大小,然后根据比对结果进行有序存储。c++标准库中,map比较函数的函数对象不可避免地会用到’<'运算,因此一种方法就是直接在自定义类里重载operator<()操作符,如下所示。

#include <iostream>
#include <map>
#include <string>
using namespace std;

class Person{
   
public:
    string name;
    int age;

    Person(string n, int a){
   
        name = n;
        age = a;
    }

    bool operator<(const Person &p) const //注意这里的两个const
    {
   
        return (age < p.age) || (age == p.age && name.length() < p.name.length(
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值