您的位置:

使用C++ Map实现快速查找

一、Map简介

Map是C++标准库提供的一种关联容器,可以进行快速的键值对查找。Map底层是使用红黑树实现的,可以保证插入、删除、查找的时间复杂度都是O(log n)。Map的使用方法类似于数组,但是可以使用任意类型作为Key,而且不需要提前设定数组大小。下面将详细介绍使用Map实现快速查找的过程。

二、Map使用方法

使用Map需要包含头文件,然后定义一个Map对象。Map对象的定义方式如下:

map<键类型,值类型> Map名称;
其中键类型指的是Map中键(Key)的数据类型,值类型指的是Map中值(Value)的数据类型。下面是一个例子,定义了一个将字符串映射成整数的Map:
map str2int;

  

三、Map的插入操作

Map的插入操作使用insert()函数,插入的数据以键值对(Key-Value)的方式给出,具体语法如下:

Map名称.insert(pair<键类型,值类型>(键值, 值));
其中pair是C++标准库提供的对键值对进行打包的模板类,可以将两个数据打包为一个整体进行处理。下面是一个例子,将字符串和整数打包成为一个键值对并插入到Map中:
str2int.insert(pair("apple",1));
str2int.insert(pair
   ("banana",2));
str2int.insert(pair
    ("orange",3));

    
   
  

四、Map的查找操作

Map的查找操作使用find()函数,给出一个键(Key)的值,返回一个指向对应值(Value)的迭代器。如果键不存在,则返回指向Map末尾的迭代器(end())。下面是一个例子,查找字符串"apple"对应的整数值:

map::iterator it= str2int.find("apple");
if (it!=str2int.end()){
    cout << "apple对应的整数值是:"<< it->second << endl;
}
else {
    cout << "查找失败" << endl;
}

  
输出结果为:
apple对应的整数值是:1

五、实例:用Map实现快速查找

现有10万个手机号码,要进行快速的查询。可以将手机号码存储在Map中,以手机号码作为键(Key),以用户信息作为值(Value)进行存储。下面是一个例子,将一些用户信息存储到Map中,然后根据手机号码进行查找:

#include 
#include 
   
#include 
    
using namespace std;

struct UserInfo {
    string name;
    int age;
    string address;
};

int main() {
    map
      phonebook;
    phonebook.insert(pair
      ("15512345678", {"Tom", 21, "Beijing"}));
    phonebook.insert(pair
       
        ("15687654321", {"Jerry", 23, "Shanghai"})); phonebook.insert(pair
        
         ("15900001111", {"Lucy", 22, "Guangzhou"})); phonebook.insert(pair
         
          ("13188889999", {"Lily", 20, "Chongqing"})); string phone; cout << "请输入手机号码: "; cin >> phone; map
          
           ::iterator it= phonebook.find(phone); if (it!=phonebook.end()){ cout << it->second.name << " " << it->second.age << "岁" <
           
            second.address << endl; } else { cout << "查无此人" << endl; } return 0; }