map--C++ STL 学习
来源:互联网 发布:23周胎儿四维彩超数据 编辑:程序博客网 时间:2024/04/29 19:09
map–C++ STL 学习
Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力。
说下map内部数据的组织,map内部自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的。
map是使用红黑树实现的,访问、查找和删除操作的复杂度都是O(logn)。
template< class Key, //键 class T, //值 class Compare = std::less<Key>, // class Allocator = std::allocator<std::pair<const Key, T> > class map;
(1)map的创建
map共提供了6个构造函数,这块涉及到内存分配器这些东西,略过不表,在下面我们将接触到一些map的构造方法,这里要说下的就是,我们通常用如下方法构造一个map:
Map<int, string> mapStudent;
(2)遍历操作
遍历map无疑就需要使用到迭代器,下面列出了四种map迭代器
iterator begin(); //返回指向起始元素的迭代器iterator rbegin(); //返回指向末尾元素的迭代器iterator end(); //返回指向末尾元素的后一个的迭代器iterator rend(); //返回指向起始元素的前一个的迭代器
(3)插入操作
1.使用[]插入
直接使用[]插入,如果mymap中不存在键值为”abc”元素,那么就执行插入操作。
mymap["abc"] = 1;
2.插入单个元素
//函数原型:std::pair<iterator,bool> insert( const value_type& value ); //这里的返回值:bool表示插入是否成功、iterator返回插入的位置//操作示例:mymap.insert( map<int, string>::value_type(1, "one") );
3.插入多个元素
//函数原型:template< class InputIt > void insert( InputIt first, InputIt last );//操作示例:map<int, string> tmp = { {5, "five"}, {6, "six"}};mymap.insert( tmp.begin(),tmp.end() );
4. 使用std::initializer_list插入
C++11中新加入的插入数据方式:
//函数原型:void insert( std::initializer_list<value_type> ilist ); //操作示例:mymap.insert( { {7, "seven"}, {8, "eight"}, {9, "nine"} } );
(4)删除操作
1. 删除指定位置的元素
//函数原型:iterator erase( iterator pos ); //具体示例:std::map<std::string,int>::iterator it = mymap.erase(mymap.begin()); //返回删除元素的下一个元素的迭代器
2. 删除指定范围的元素
//函数原型:iterator erase( const_iterator first, const_iterator last ); //具体示例:mymap.erase(mymap.begin(), mymap.end()); //删除所有的元素
3. 依据键值删除元素
//函数原型:size_type erase( const key_type& key ); //具体示例:int num = mymap.erase("abc");
PS:方法一和方法二的返回值都是删除元素的下一个元素的迭代器,在C++11之前他们都是没有返回值的。方法三的返回值是删除元素的数目。
(5)max_size(),最大容纳量;size(),当前的元素个数
cout << "map中的最大容量为:" << map1.max_size() << endl;cout << "map中的元素个数为:" << map1.size() << endl;
(6)empty(),判断map是否为空
cout << "map是否为空:" << map1.empty() << endl;
如果为空,返回1.否则返回0。
(7)swap():交换两个map中的值。
(8)[],at(),取某位置的元素值
// 取map中某位置的元素值cout << "在1位置的元素值为:" << map1.at(1) << endl;cout << "在1位置的元素值为:" << map1[1] << endl;
(9)[],at():修改元素
// 修改map中的某个值map1[2] = 99;map1.at(3) = 88;
(10)clear():清除所有元素
// 清除所有数据 map1.clear(); cout << "map是否为空:" << map1.empty() << endl;
执行以后就是一个空的map,不包含任何元素。
其他方法
size_type count( const Key& key ) const; //返回关键字为key的元素的个数,在map里结果不是0就是1iterator find( const Key& key ); //返回key所在位置的迭代器,如果没有找到则返回end()
关于map的更详细介绍可以参考文档:http://en.cppreference.com/w/cpp/container/map
0 0
- C++stl map学习
- C++STL之map学习
- C++STL之map学习
- [c++]stl map
- C++STL:map概述
- C++STL之map
- 【C++】STL--MAP
- [C++]STL之map
- C++STL 之map
- C++STL之map
- map--初步学习STL
- STL map学习
- STL--map学习
- STL - map学习总结
- STL学习之map
- STL map学习
- 学习STL@map篇
- STL学习-map
- 从bzoj2463到bzoj1443和bzoj2437 博弈+二分图匹配
- ServletConfig
- 在本地用命令行创建一个git仓库,并推送到远程
- 自组织神经网络,适合新手阅读
- web实现跑马灯
- map--C++ STL 学习
- JavaSE_32th_容器(类集框架)
- Longest Word in Dictionary through Deleting
- 一个多项式a+b*x+c*x^2+d*x^3+...,输入该多项式的系数和x的值后打印出这个多项式的值。
- 自定义控件:等比例显示控件RatioLayout
- Lenovo ThinkStation P710
- 取消jQuery validate验证
- 面向对象编程思想---OOP
- Spring面试题及答案(69道)