vector,map和set笔记
2017-09-13 09:13
106 查看
vector:
c++新增的动态数组
基本操作
push_back() 在数组的最后添加一个元素
pop_back() 去掉数组的最后一个元素
at() 得到编号位置的数据
begin() 得到数组头的指针
end() 得到数组尾的指针
front() 得到数组头部元素的引用
back() 得到数组末尾元素的引用
max_size() 得到vector最大可以是多大
capacity() 当前vector分配的大小
size() 当前使用数据的大小
resize() 改变当前使用数据的大小,如果它比当前使用的大,则填充默认值
reserve() 改变当前vector所分配空间的大小
erase() 删除指针指向的数据项
clear() 清空当前的vector
rbegin() 将vector反转后的开始指针返回(原来的end-1)
rend() 将vector反转后的开始指针返回(原来的begin-1)
empty() 判断vector是否为空
swap() 与另一个vector交换
常见操作
对vector从小到大排序:sort(begin(),end());要按从大到小排序需要自定义比较函数
map和set底层都是红黑树
map:
map是关联容器,实现数据的一一映射
可以这样定义一个映射:比如map<string,int>month,然后我们就可以这样来定义或修改一个映射关系m["July"]=7。
内部是一棵红黑树
数据的插入
在构造map容器后我们就可以往里面插入数据了。这里记三种方式。
1.用insert函数插入pair数据:m.insert(pair<string,int>("January",1)); //pair也是模板,将两个数据合并为一个通过first和second访问,还有就是mark_pair操作
2.用insert插入value_type数据:m.insert(map<string,int>::value_type("January",1));
3.用数组方式插入:m["January"]=1; //就是像数组一样插入,在关键字已经存在的情况下会覆盖原来的值
大小:m.size这样查询
查找:
1.使用count判断关键字是否出现,但无法确定位置。
2.使用find函数,能定位位置和返回位置的一个迭代器,如果查找不到返回的迭代器等于end函数返回的迭代器
3.lower_bound函数返回查找关键字的下届,upper_bound函数返回查找关键字的上届,equal_range返回的是pair,里面两个元素分别是lower_bound和upper_bound返回的迭代器,如果相等,则关键字不存在
if(map_pair.first==map_pair.second)
cout<<"Do nor find";
迭代器类似指针能在不暴露对象内部的情况下遍历元素如for(vector<int>::iterator iter = ivec.begin();1. iter != ivec.end(); ++iter)
清空:clear函数
判定是否为空:emply函数
删除:erase函数
用关键字删除m.erase(key);
成片删除如m.erase(m.begin(),m.end()); //删除的是左闭右开的一个区间,end返回的是区间的结束末尾地址而不是最后一个元素的地址,左闭右开。
count(x):返回的map中是否存在x,也就是说返回值只有0和1。map是一种映射的结构,函数的的作用也就是判断定义域中有没有x。
find(x):在map中查找x,查找到就返回相应的地址(迭代器),失败就返回end()。
set:
set是集合,和vector不同的是set中元素不能重复,这时一个有序的容器,里面的元素都是排好序的,和multiset不同的是set中元素不能重复
set中元素的插入查询删除等都是在logn时间内完成的
基本操作:
begin() 返回指向第一个元素的迭代器
chear() 清空操作
count() 返回某个值的个数
empty() 判断是否为空
end() 返回指向最后一个元素的迭代器
equal_range() 返回集合中与给定值相等的上下限的两个迭代器
erase() 删除集合中的元素
find() 返回一个指向被查到元素的迭代器
get_allocator() 返回集合的分配器
insert() 在集合中插入元素
lower_bound() 返回指向大于或等于某值的第一个元素的迭代器
key_comp() 返回集合能容纳的元素的最大限值
rbegin() 返回指向集合最后一个元素的反向迭代器
rend() 返回指向集合第一个元素的反向迭代器
size() 集合中元素的数目
swap() 交换两个集合的变量
upper_bound() 返回大于某个值元素的迭代器
value_comp() 返回一个用于比较元素间的值的函数
c++新增的动态数组
基本操作
push_back() 在数组的最后添加一个元素
pop_back() 去掉数组的最后一个元素
at() 得到编号位置的数据
begin() 得到数组头的指针
end() 得到数组尾的指针
front() 得到数组头部元素的引用
back() 得到数组末尾元素的引用
max_size() 得到vector最大可以是多大
capacity() 当前vector分配的大小
size() 当前使用数据的大小
resize() 改变当前使用数据的大小,如果它比当前使用的大,则填充默认值
reserve() 改变当前vector所分配空间的大小
erase() 删除指针指向的数据项
clear() 清空当前的vector
rbegin() 将vector反转后的开始指针返回(原来的end-1)
rend() 将vector反转后的开始指针返回(原来的begin-1)
empty() 判断vector是否为空
swap() 与另一个vector交换
常见操作
对vector从小到大排序:sort(begin(),end());要按从大到小排序需要自定义比较函数
map和set底层都是红黑树
map:
map是关联容器,实现数据的一一映射
可以这样定义一个映射:比如map<string,int>month,然后我们就可以这样来定义或修改一个映射关系m["July"]=7。
内部是一棵红黑树
数据的插入
在构造map容器后我们就可以往里面插入数据了。这里记三种方式。
1.用insert函数插入pair数据:m.insert(pair<string,int>("January",1)); //pair也是模板,将两个数据合并为一个通过first和second访问,还有就是mark_pair操作
2.用insert插入value_type数据:m.insert(map<string,int>::value_type("January",1));
3.用数组方式插入:m["January"]=1; //就是像数组一样插入,在关键字已经存在的情况下会覆盖原来的值
大小:m.size这样查询
查找:
1.使用count判断关键字是否出现,但无法确定位置。
2.使用find函数,能定位位置和返回位置的一个迭代器,如果查找不到返回的迭代器等于end函数返回的迭代器
3.lower_bound函数返回查找关键字的下届,upper_bound函数返回查找关键字的上届,equal_range返回的是pair,里面两个元素分别是lower_bound和upper_bound返回的迭代器,如果相等,则关键字不存在
if(map_pair.first==map_pair.second)
cout<<"Do nor find";
迭代器类似指针能在不暴露对象内部的情况下遍历元素如for(vector<int>::iterator iter = ivec.begin();1. iter != ivec.end(); ++iter)
清空:clear函数
判定是否为空:emply函数
删除:erase函数
用关键字删除m.erase(key);
成片删除如m.erase(m.begin(),m.end()); //删除的是左闭右开的一个区间,end返回的是区间的结束末尾地址而不是最后一个元素的地址,左闭右开。
count(x):返回的map中是否存在x,也就是说返回值只有0和1。map是一种映射的结构,函数的的作用也就是判断定义域中有没有x。
find(x):在map中查找x,查找到就返回相应的地址(迭代器),失败就返回end()。
set:
set是集合,和vector不同的是set中元素不能重复,这时一个有序的容器,里面的元素都是排好序的,和multiset不同的是set中元素不能重复
set中元素的插入查询删除等都是在logn时间内完成的
基本操作:
begin() 返回指向第一个元素的迭代器
chear() 清空操作
count() 返回某个值的个数
empty() 判断是否为空
end() 返回指向最后一个元素的迭代器
equal_range() 返回集合中与给定值相等的上下限的两个迭代器
erase() 删除集合中的元素
find() 返回一个指向被查到元素的迭代器
get_allocator() 返回集合的分配器
insert() 在集合中插入元素
lower_bound() 返回指向大于或等于某值的第一个元素的迭代器
key_comp() 返回集合能容纳的元素的最大限值
rbegin() 返回指向集合最后一个元素的反向迭代器
rend() 返回指向集合第一个元素的反向迭代器
size() 集合中元素的数目
swap() 交换两个集合的变量
upper_bound() 返回大于某个值元素的迭代器
value_comp() 返回一个用于比较元素间的值的函数
相关文章推荐
- STL中的常用的vector,map,set,sort, list用法笔记
- STL中的常用的vector,map,set,sort, list用法笔记(转)
- STL中的常用的vector,map,set,sort用法笔记(转)
- STL中的常用的vector,map,set,sort, list用法笔记 .
- STL中的常用的vector,map,set,sort, list用法笔记(转)
- 编程技巧干货笔记 【Vector / Set OR Map ?】
- map,set,vector,string笔记整理(C++)
- C++中 vector、list、deque、set、map
- Set、List、Map以及Arraylist、LikedList、Vector、Hashtable、HashMap的介绍
- java中set/map/list/vector 的总结
- vector,list,deque,set,map of STL
- List、vector、set、map的区别与联系
- c++STL容器(map,set,vector,stack,queue)
- ECMAScript 6 学习笔记----set和map数据结构
- List, Set, Vector and Map in Java
- c++ list, vector, map, set 区别与用法比较
- Java高级个人笔记(判断List、Map、Set是否为空及效率比较)
- STL 整理(map、set、vector、list、stack、queue、deque、priority_queue)
- STL 整理(map、set、vector、list、stack、queue、deque、priority_queue)
- C++各个容器比较(vector,deque,list,set,map,queue,stack)