C++STL之map的使用详解

 简介:map底层实现为红黑树,增删查的时间复杂度:O(logn), key是有序的,默认升序

一、初始化

#include
#include
#include
using namespace std;
int main()
{
    std::map myMap = { {1, "apple"}, {2, "mango"} }; // 初始化
    
    std::map m1(myMap);  // 拷贝构造
    
    std::map m2 = myMap; // 赋值
    
    return 0;
}

二、插入数据

1、使用make_pair插入键值对

m1.insert(make_pair(3, "banana"));

2、使用pair对象插入键值对

m1.insert(pair(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 m2 = m1;
m2.swap(m1);

ok,今天分享就到这里了。

如果觉得分享对你有所帮助的话,记得点赞C++STL之map的使用详解_第1张图片C++STL之map的使用详解_第2张图片C++STL之map的使用详解_第3张图片哦!

主页还有其他相关文章,欢迎一起学习,一起进步~

C++STL之map的使用详解_第4张图片

你可能感兴趣的:(STL读书笔记,c++,stl,算法)