C++容器概述

C++容器概述

C++STL提供了六大组件,彼此之间可以组合套用,这六大组件分别是:容器、算法、迭代器、仿函数、适配器(配接器)、空间配置器

STL六大组件的交互关系:
1、容器通过空间配置器取得数据存储空间
2、算法通过迭代器存储空间的内容
3、仿函数可以协助算法完成不同策略的变化
4、适配器可以修饰仿函数

容器:就是各种数据结构,如vector、list、deque、set、map等,用于存放数据,从实现的角度来看,STL容器是一种模板类。

1、顺序容器

定义: 在容器内部,元素的摆放是有顺序的。
C++容器概述_第1张图片

2、关联容器

定义: 关联容器不计较顺序的概念,使用关键字来访问元素。

标准的STL关联容器分为set(集合)和map(映射)两大类,以及这两大类的衍生体multiset(多键集合)和multimap(多键映射表)。这些容器的底层机制均以RB-tree完成(红黑树)。

①map操作

map只允许产生一对一的关系,也就是一个关键字对应一个值,就如生活中大多数人,一人一套房。但是也有人是名下多套房,这就可以使用multimap,它允许一个关键字对应多个值。

a.添加

不允许key有重复的

	address_map.insert({"张三" , "星湖花园1号"});
	address_map.insert(make_pair("李四" , "星湖花园1号"));
	address_map.insert(pair<string ,string>("王五" , "星湖花园1号"));

b.访问

map可以使用[ ]的方式来获取指定的元素,要求传递进来的是key关键字

	string address = address_map["张三"] ;
	string address2 = address_map.at("张三2")

c.删除

除了可以使用迭代器的方式删除外,还可以根据关键字来删除数据

    //迭代器方式删除。
    for(auto i = address_map.begin() ; i != address_map.end() ; i++){
        if(i->first == "李四"){
            address_map.erase(i);
        }
    }

    //使用关键字删除
    address_map.erase("王五");

    //清空整个map
    address_map.clear();

d.修改

修改其实就是替换,如果还是使用insert是不起作用的,因为它会执行唯一检查,使用at函数,对某一个特定关键字的位置修改值

	map.at("张三1") = 99;

其他操作

判断是否为空、获取大小、判断是否存在key

    //判断是否为空
    bool empty = map.empty();
    
    //获取大小
    int size = map.size();
    
    //查询该key在map中的个数,可用来判断是否存在该key
    int count = map.count("张三1");

2、set操作

set是关键字的简单集合,并且容器内部元素不可重复且有顺序。当只是想知道一个值是否存在时,set是最有用的。set为不可重复容器,而multiset为可重复容器

a.添加

    //创建容器并初始化,可变参数往里面赋值,但是这里添加了重复的3. 后面的3不会被添加进去。
    set<int> s1{3,4,5,6,3};
    s.insert(16);
    s.insert({7,8,9,10}); //也可以接收可变参数

你可能感兴趣的:(笔记,c++,大数据,开发语言)