简介:map底层实现为红黑树,增删查的时间复杂度:O(logn), key是有序的,默认升序
一、初始化
#include<iostream>
#include<map>
#include<string>
using namespace std;
int main()
{std::map<int, std::string> myMap = { {1, "apple"}, {2, "mango"} }; // 初始化std::map<int, std::string> m1(myMap); // 拷贝构造std::map<int, std::string> m2 = myMap; // 赋值return 0;
}
二、插入数据
1、使用make_pair插入键值对
m1.insert(make_pair(3, "banana"));
2、使用pair对象插入键值对
m1.insert(pair<int, std::string>(4, "orange"));
3、使用下标操作符
m1[5] = "watermelon";
4、使用emplace函数(推荐使用)
emplace接受键和值的构造函数参数,并直接构造键值对对象,避免了临时的pair对象的创建,从而提高了性能
m1.emplace(6, "cherry");
三、删除数据
1、erase删除单个数据
m1.erase(1); // 删除key为1的数据
2、erase删除多个数据
m1.erase(m1.begin(), m1.end()); // 删除m1中所有数据(左闭右开)
3、clear删除所有数据
m1.clear(); // 清空m1中数据
注:迭代器失效问题
四、修改数据
1、使用下标
使用下标操作符,如果键1不存在,会创建一个新的键值对(1, ""),如果键3已经存在,会更新其对应的值为""
m1[1] = "";
2、使用迭代器
使用find方法和迭代器, 使用find方法则更加安全,因为它不会在你尝试修改不存在的键时创建新的键值对
auto it = m1.find(1);
if (it != m1.end())
{it->second = "apple";
}
五、查找数据
1、使用find方法和迭代器
auto it = m1.find(0); // 使用find方法和迭代器
if (it != m1.end())
{std::cout << "find key:" << it->first << ", v:" << it->second << std::endl;
}
else
{std::cout << "key is not find" << std::endl;
}
六、容器数据大小相关
1、使用size()函数
int size = m1.size();
2、使用empty()判断是否为空
if (m1.empty())
{std::cout << "m1 is empty" << std::endl;
}
else
{std::cout << "m1 is not empty" << std::endl;
}
七、其他用法
1、swap交换数据
std::map<int, std::string> m2 = m1;
m2.swap(m1);
ok,今天分享就到这里了。
如果觉得分享对你有所帮助的话,记得点赞哦!
主页还有其他相关文章,欢迎一起学习,一起进步~