一、map

1.map简介

map是一种关联式容器,一对一的映射

  • 第一个是key,是唯一的。
  • 第二个是value,关键字所对应的值。

因为map的底层实现是红黑树,所以map会对插入的数据进行排序。

2.插入元素

采用insert直接下标访问两种方式,同时可以看到输出是按照key值排序。

#include"map"
int main() {
map<int,string> um;
um.insert(pair<int,string>(,"steve"));
um[]="antonio"; //访问方式,可以看到插入的元素最后会按照key值排序
for (auto item:um) {
cout<<item.first<<" "<<item.second<<endl;
}
//1 antonio
//2 steve
return ;
}

3.查找元素

查找key出现的位置,如果没有在map中,则返回end(指向尾部的迭代器)

#include"map"
int main() {
map<int,string> um;
um.insert(pair<int,string>(,"steve"));
um[]="antonio"; if(um.find()!=um.end())
cout<<"have found"<<endl;
else
cout<<"not found"<<endl;
return ;
}

4.map常用成员方法

begin() 返回指向map头部的迭代器

end() 返回指向map末尾的迭代器

rbegin() 返回一个指向map尾部的逆向迭代器

rend() 返回一个指向map头部的逆向迭代器

clear() 删除所有元素

count() 返回指定元素出现的次数

empty() 如果map为空则返回true

erase() 删除一个元素

find() 查找一个元素

insert() 插入元素

lower_bound() 返回键值>=给定元素的第一个位置

size() 返回map中元素的个数

5.map和unordered_map比较

在数据量小的时候,unordered_map比map慢

原因在于unordered_map的初始化比较耗时,我们都知道map是红黑树,unordered_map是哈希表,造成性能差异的原因在于,红黑树初始化时,节点只需要一个,后续的插入只是插入新的节点,但是哈希表初始化时就不是那么简单了,哈希表初始化时需要申请一个数组,数组的每个元素都指向一条链表,所以初始化时需要申请很多内存,相比于map,的确更耗时。

二、set

1.set简介

set只保存一个元素,就是key。

set底层实现同样是红黑树,故而内部数据是会排序好。

2.set的插入和遍历

采用insert方法插入。

#include"set"
int main() {
set<int> us;
us.insert();
us.insert();
us.insert(); //1 2 3
for (auto item:us) {
cout<<item<<" ";
}
return ;
}

3.set常用成员方法

begin()        返回set容器的第一个元素

end()      返回set容器的最后一个元素

rbegin()     返回的值和end()相同

rend()     返回的值和rbegin()相同

clear()          删除set容器中的所有的元素

empty()     判断set容器是否为空

size()      返回当前set容器中的元素个数

三、 unordered_map

1.简介

unordered_map是一种关联式容器,一对一的映射

  • 第一个是key,是唯一的。
  • 第二个是value,关键字所对应的值。

底层实现是hash表,故而其内的元素是无序的。

其中hash是使用的拉链法解决冲突。如下图所示

2.元素初始化

插入有常用的两种方式,赋值常用量两种方式。

#include"unordered_map"
#include "iostream"
using namespace std;
//对unordered_map<int,string>使用别名int_string
typedef unordered_map<int,string> int_string;
int main() {
//初始化的几种方法
int_string one={{,"bash"},{,"java"}};
one[]="python";//直接下标插入元素
one.insert(pair<int,string>(,"c++"));//使用成员方法insert插入元素 int_string two ( one ); // 用数组初始
int_string three ( two.begin(),two.end()); // 范围初始化 //访问方式
for (auto item:three) {
cout<<item.first<<" "<<item.second<<endl;
}
return ;
}

3.常用成员方法

begin()    指向第一个元素
end()       指向最后一个元素的迭代器
empty()   判别是否为空
size()      所有键值对的数量
insert()    插入一对元素
erase()    删除指定的键值对
find()       查找元素,如果存在返回的是key值对应的迭代器,如果不存在返回的是end()

四、 unordered_set

1.简介

只保存关键词key

底层实现是hash表,故而其内的元素是无序的。

2.数据初始化

#include"iostream"
#include"unordered_set"
using namespace std;
typedef unordered_set<int> US;
int main() {
US us;
us.insert();
us.insert();
US one(us);//one=us;是等价的
US two(one.begin(),one.end()); //访问方式
for (auto item:two) {
cout<<item<<endl;
}
return ;
}

五、vector

1.简介

vector是序列式容器,按照下表访问。

2.数据初始化

含有一维数组和二维数组的初始化

#include"vector"
using namespace std;
typedef vector<int> Vector;
int main() {
Vector vec(,);
Vector vec1(vec); //Vector vec1=vec这两种方式是等价的
Vector vec2(vec.begin(),vec.end());
Vector vec3={,,,};
Vector vec4();//初始化数组的大小是10,value是0
Vector vec5(,);//初始化数组的大小是10,value是1
//二维矩阵的初始化
vector<vector<int>> ans(,vector<int>(,));
vector<vector<int>> ans1(ans);
return ;
}

3.常用成员方法

begin()        指向第一个元素的迭代器
end()           指向最后一个元素的下一个位置的迭代器
empty()       判别是否为空
size()          存储的数据量
insert()        插入元素
push_back()    在尾部插入元素
pop_back()      将尾部元素弹出

#include"iostream"
#include"vector"
using namespace std;
typedef vector<int> Vector;
int main() {
Vector vec;
vec.push_back();//push元素到末尾
vec.push_back();
vec.push_back();
vec.insert(vec.begin()+,-); //1 -1 2 3
for (int i = ; i < vec.size(); ++i) {
cout<<vec[i]<<" ";
}
vec.pop_back();//将元素弹出
//1 -1 2
for (int i = ; i < vec.size(); ++i) {
cout<<vec[i]<<" ";
}
return ;
}

STL ——map、set、unordered_map、unordered_set的更多相关文章

  1. [STL] map,multimap,unordered_map基本用法

    map的特性是,所有元素都会根据元素的键值自动被排序.map的所有元素都是pair,同时拥有键值(key)和实值(value).pair的第一元素被视为键值,第二元素被视为实值.map不允许两个元素拥 ...

  2. STL之map与pair与unordered_map常用函数详解

    STL之map与pair与unordered_map常用函数详解 一.map的概述 map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称 ...

  3. stl vector、红黑树、set、multiset、map、multimap、迭代器失效、哈希表(hash_table)、hashset、hashmap、unordered_map、list

    stl:即标准模板库,该库包含了诸多在计算机科学领域里所常用的基本数据结构和基本算法 六大组件: 容器.迭代器.算法.仿函数.空间配置器.迭代适配器 迭代器:迭代器(iterator)是一种抽象的设计 ...

  4. std::map的操作:插入、修改、删除和遍历

    using namespace std; std::map<int,int> m_map; 1.添加 for(int i=0;i<10;i++) { m_map.insert(mak ...

  5. python_08 函数式编程、高阶函数、map、filter、reduce函数、内置函数

    函数式编程 编程方法论: 1.面向过程 找到解决问题的入口,按照一个固定的流程去模拟解决问题的流程 (1).搜索目标,用户输入(配偶要求),按照要求到数据结构内检索合适的任务 (2)表白,表白成功进入 ...

  6. list源码2(参考STL源码--侯捷):constructor、push_back、insert

    list源码1(参考STL源码--侯捷):list节点.迭代器.数据结构 list源码2(参考STL源码--侯捷):constructor.push_back.insert list源码3(参考STL ...

  7. vector源码3(参考STL源码--侯捷):pop_back、erase、clear、insert

    vector源码1(参考STL源码--侯捷) vector源码2(参考STL源码--侯捷):空间分配.push_back vector源码(参考STL源码--侯捷)-----空间分配导致迭代器失效 v ...

  8. vector源码2(参考STL源码--侯捷):空间分配、push_back

    vector源码1(参考STL源码--侯捷) vector源码2(参考STL源码--侯捷) vector源码(参考STL源码--侯捷)-----空间分配导致迭代器失效 vector源码3(参考STL源 ...

  9. 学习Road map Part 04 自动驾驶、SLAM、ROS、树莓派

    学习Road map Part 04 自动驾驶.SLAM.ROS.树莓派

  10. CNN中feature map、卷积核、卷积核的个数、filter、channel的概念解释

    CNN中feature map.卷积核.卷积核的个数.filter.channel的概念解释 参考链接: https://blog.csdn.net/xys430381_1/article/detai ...

随机推荐

  1. 【测试点】微信小程序的常见测试点

    第一次测试微信小程序,整理了一些必要的测试点和原则,以此为参考去设计详细测试用例

  2. Redux API

    Redux API ​ Redux的API非常少.Redux定义了一系列的约定(contract),同时提供少量辅助函数来把这些约定整合到一起. ​ Redux只关心如何管理state.在实际的项目中 ...

  3. class与class的继承

    class Point{ constructor(x,y){ this.x = x; this.y = y; } toString(){ return '(' + this.x + ',' + thi ...

  4. poj 3069 Saruman's Army 贪心 题解《挑战程序设计竞赛》

    地址 http://poj.org/problem?id=3069 题解 题目可以考虑贪心 尽可能的根据题意选择靠右边的点 注意 开始无标记点 寻找左侧第一个没覆盖的点 再来推算既可能靠右的标记点为一 ...

  5. Apriori关联分析详解

    ------------恢复内容开始------------ 一. Apriori关联分析概述 选择物品之间的关联规则也就是要找出物品之间的关系,要找到这种关系有两步 找出频繁一起出现的物品集的集合, ...

  6. 2019徐州网络赛 I J M

    I. query 比赛时候没有预处理因子疯狂t,其实预处理出来因子是\(O(nlog(n))\)级别的 每个数和他的因子是一对偏序关系,因此询问转化为(l,r)区间每个数的因子在区间(l,r)的个数 ...

  7. import和from...import

    目录 一.import 模块名 二.from 模块名 import 具体的功能 三.import和from...import...的异同 一般使用import和from...import...导入模块 ...

  8. D3力布图绘制--节点自己连自己的实现

    案例分析 先看下实现的效果图 实现方法 本篇是在之前写的博文 D3力布图绘制--节点间的多条关系连接线的方法 基础上加修改的,这里放上修改的代码,其他的一样 // DATA var nodes = [ ...

  9. MySQL字符类型学习笔记

    目录 一.字符集和字符编码 1.1.字符集 1.2.字符编码 二.字符集排序规则 2.1.排序规则定义 2.2 .排序规则特征 三.CHAR和VARCHAR 3.1.CHAR类型 3.2.VARCHA ...

  10. 新增SAP到OA接口,OA怎么更新WSDL给PI,怎么选择PI的IP地址(备忘)

    1.首先定义个class. 弄完以后可以使用http://IP地址:8088/seeyon/services/sapService?wsdl  进行导出,部署在哪个服务器就用哪个服务器的IP地址 pr ...