Map in C++

map简介

是STL的一个关联容器,它提供一对一的hash。

-    第一个可以称为关键字(key),每个关键字只能在map中出现一次;

-    第二个可能称为该关键字的值(value);

map以模板(泛型)方式实现,可以存储任意类型的数据,包括使用者自定义的数据类型。Map主要用于资料一对一映射(one-to-one)的情況,map內部的实现自建一颗红黑树,这颗树具有对数据自动排序的功能。在map内部所有的数据都是有序的,后边我们会见识到有序的好处。比如一个班级中,每个学生的学号跟他的姓名就存在著一对一映射的关系。


使用map

#include   //注意,STL头文件没有扩展名.h

map对象是模板类,需要关键字和存储对象两个模板参数:

std:map<int, string> personnel;

这样就定义了一个用int作为索引,并拥有相关联的指向string的指针.

插入元素

map mapStudent;

mapStudent.insert(pair(000, "student_zero"));

//方法1:使用insert函数插入pair

mapStudent[123] = "student_first";

//方法2:用"array"方式插入

用insert函数插入数据,在数据的 插入上涉及到集合的唯一性这个概念,即当map中有这个关键字时,insert操作是不能在插入数据的,但是用数组方式就不同了,它可以覆盖以前该关键字对 应的值,用程序说明如下:

mapStudent.insert(map::value_type (001, "student_two"));

mapStudent.insert(map::value_type (001, "student_two"));

上面这两条语句执行后,map中001这个关键字对应的值是“student_one”,第二条语句并没有生效,那么这就涉及到我们怎么知道insert语句是否插入成功的问题了,可以用pair来获得是否插入成功,程序如下

// 构造定义,返回一个pair对象

pair insert (const value_type& val);

pair::iterator, bool> Insert_Pair;

Insert_Pair = mapStudent.insert(map::value_type (001, "student_one")); if(!Insert_Pair.second)

    cout << ""Error insert new element" << endl ;

我们通过pair的第二个变量来知道是否插入成功,它的第一个变量返回的是一个map的迭代器,如果插入成功的话Insert_Pair.second应该是true的,否则为false。

查找元素

当所查找的关键key出现时,它返回数据所在对象的位置,如果沒有,返回iter与end函数的值相同。

map::iterator iter;

iter = mapStudent.find("123");

if(iter != mapStudent.end())

    cout<<"Find, the value is"<second<

else

    cout<<"Do not Find"<

刪除与清空元素

//迭代器刪除

iter = mapStudent.find("123");

mapStudent.erase(iter);

//用关键字刪除

int n = mapStudent.erase("123"); //如果刪除了會返回1,否則返回0

//用迭代器范围刪除 :把整个map清空

mapStudent.erase(mapStudent.begin(), mapStudent.end());

//等同于mapStudent.clear()



map的遍历

#include

#include

using namespace std;

int main() {

    map _map; _map[0] = 1;

    _map[1] = 2;

    _map[10] = 10;

    map::iterator iter;

    iter = _map.begin();

    while(iter != _map.end()) {

        cout << iter->first << " : " << iter->second << endl; iter++;

    } // 也可以使用for循环遍历

    /* for(iter = _map.begin(); iter != _map.end(); iter++) {

        cout << iter->first << " : " << iter->second << endl;

    } */

return 0;

 map的基本操作函数

begin()         返回指向map头部的迭代器

clear()        删除所有元素

count()         返回指定元素出现的次数

empty()         如果map为空则返回true

end()           返回指向map末尾的迭代器

equal_range()   返回特殊条目的迭代器对

erase()         删除一个元素

find()          查找一个元素

get_allocator() 返回map的配置器

insert()        插入元素

key_comp()      返回比较元素key的函数

lower_bound()   返回键值>=给定元素的第一个位置

max_size()      返回可以容纳的最大元素个数

rbegin()        返回一个指向map尾部的逆向迭代器

rend()          返回一个指向map头部的逆向迭代器

size()          返回map中元素的个数

swap()           交换两个map

upper_bound()    返回键值>给定元素的第一个位置

value_comp()     返回比较元素value的函数

参考资料

[1]    https://blog.csdn.net/sevenjoin/article/details/81943864

你可能感兴趣的:(Map in C++)