C++STL常用操作之map篇
简介:
#include<map>
map是标准的关联式容器,它的元素是一个对(这里可以参考一下之前的pair篇)。
我们将它的对表示为:(key,value),可以理解为key是关键字,value是它对应的值,
在map中key值是唯一的。
map的实现是采用红黑树变体的平衡二叉树来实现的,其中的元素是按一定的顺序排序的,插入过程也是按照排序规则进行的。
1.构造
map<int, string> mp1;
map<int, char> mp2;
//也可以是其他各种类型包括自定义结构体
2.插入
(1)通过pair插入
map<int, string> mp1;
mp1.insert(pair<int, string>(1, "1111"));
(2)通过make_pair插入
mp1.insert(make_pair(2, "2222"));
(3)通过value_type插入
mp1.insert(map<int, string>::value_type(3, "3333"));
(4)通过类似数组的方式插入
mp1[4] = "4444";
注意!
insert的返回值为pair<iterator,bool>
第四种方法在插入操作时,会先在mp1中查找是否存在key为4的元素,如果没有找到,那么新增一个结点,将其key赋值为4,将key=4对应的string赋值为“4444”;如果找到了则将原有的key=4对应的string值修改为“4444”。
3.常用函数
mp1.begin(); //返回mp1第一个元素的迭代器
mp1.end(); //返回mp1最后一个元素后面一个位置的迭代器
mp1.size(); //返回mp1中元素的个数
mp1.empty(); //判断mp1是否为空
mp1.find(1); //如果存在key值为1的元素,那么返回该元素的迭代器,否则返回mp1.end()
mp1.count(1); //返回key为1的元素的个数,由于map不允许key重复,所以返回值只能是0或1
这里的count函数可以和multimap来说可能会大于1。
插入函数在前面已经讲了,删除函数将在后面部分讲到。
4.删除
mp1.clear(); //清空mp1
mp1.erase(1); //删除key值为1的元素,并且返回下一个元素的迭代器
map<int, string>::iterator it = mp1.begin();
mp1.erase(it); //删除迭代器it所指向的元素,并返回下一个元素的迭代器
5.综合代码
#include<iostream>
#include<map>
using namespace std;
int main() {
map<int, string> mp1;
mp1.insert(map<int, string>::value_type(3, "我是3"));
mp1[4] = "我是4";
mp1.insert(make_pair(2, "我是2"));
mp1.insert(pair<int, string>(1, "我是1"));
//插入元素
for (auto it = mp1.begin(); it != mp1.end(); ++it)
cout << it->first << ":" << it->second << endl;
cout << "-----------------------------" << endl;
//输出
mp1.erase(1); //删除key值为1的元素,并且返回下一个元素的迭代器
for (auto it = mp1.begin(); it != mp1.end(); ++it)
cout << it->first << ":" << it->second << endl;
cout << "-----------------------------" << endl;
//删除key值为1的元素后输出
map<int, string>::iterator it = mp1.begin();
mp1.erase(it); //删除迭代器it所指向的元素,并返回下一个元素的迭代器
for (auto it = mp1.begin(); it != mp1.end(); ++it)
cout << it->first << ":" << it->second << endl;
cout << "-----------------------------" << endl;
//再删除mp1第一个元素后输出
mp1.clear(); //清空mp1
for (auto it = mp1.begin(); it != mp1.end(); ++it)
cout << it->first << ":" << it->second << endl;
cout << "-----------------------------" << endl;
//清空后输出
if (mp1.empty())
cout << "mp1 is empty!" << endl;
cout << "mp1's size is " << mp1.size() << endl;
mp1.insert(make_pair(2, "我是2"));
cout << mp1.find(2)->second << endl;
cout << mp1.count(1);
//其他函数的使用
return 0;
}
map基础应用与操作
发现问题请指正!
希望能帮助到你!不懂请留言!