set和map的增删查改
2018-04-02 20:20
99 查看
一,set用法介绍:
set是单词set(集合)的意思
只有一个键值,set当中不能存储相同的键值
所有的元素都会根据元素的键值自动被排序。(底层检索使用中序遍历算法)
相关函数:
(1)begin:返回一个迭代器,此迭代器指向set中到的第一个元素。
(2)end:返回一个迭代器,此迭代器指向set最后一个元素的下一个位置。
(3)rbegin:返回一个迭代器,此迭代器指向反向set中的第一个元素。
(4)rend:返回一个迭代器,此迭代器指向反向set中最后一个元素之后的位置。
(5)cbegin:返回一个常量迭代器,此迭代器指向set中到的第一个元素。
(6)cend:返回一个迭代器,此迭代器指向set最后一个元素的下一个位置。 (7)clear:清除set的所有元素。
(8)crbegin:返回一个常量迭代器,此迭代器指向反向set中的第一个元素。
(9)crend:返回一个常量迭代器,此迭代器指向反向set中最后一个元素之后的位置。
(10)find:返回一个迭代器,此迭代器指向set中其键与指定键相等到的元素的位置。
(11)insert:将元素或元素范围插入到set中的指定位置。 (12)size:返回set中元素的数量。
(13)swap:交换两个set的元素。
(1)插入(正向遍历):
采用insert()方法把元素插入到集合中,一般按元素值从小到大插入。使用前向迭代器对集合中序遍历,结果正好是元素排序后的结果。
输出:1 3 5 6
(2)反向遍历:
使用反向迭代器reverse_iterator可以反向遍历集合,输出的结果正好是集合元素的反向排序结果。它需要用到rbegin()和rend()两个方法,它们分别给出了反向遍历的开始位置和结束位置。
输出:6 5 3 1
(3)删除:
(4)查找:
使用find()方法对集合进行检索,如果找到查找的键值,返回该键值的迭代器位置,否则返回集合最后一个元素后面的一个位置,即end()。
map用法介绍:
Map是单词mapping(映射)的缩写
(1)内部存储有两个部分,一个是固定的键值,另一个关键字是记录该关键字的状态(大小,翻译,对应关系等)
(2)由于map容器底层是使用搜索树来存储数据的,所以只要数据不能够相互比较大小就不能使用map存储。
相关函数
(1)begin:返回一个迭代器,此迭代器指向映射中的第一个元素 (2)end::返回超过迭代器末尾
(3)rbegin:返回一个迭代器,此迭代器指向反向映射中的第一个元素
(4)rend:返回一个迭代器,此迭代器指向反向映射中的最后一个元素之后的位置。
(5)cbegin:返回一个常量迭代器,此迭代器指向映射中的第一个元素。 (6)cend:返回一个超过末尾的常量迭代器。
(7)crbegin:返回一个常量迭代器,此迭代器指向反向映射中的第一个元素。
(8)crend:返回一个常量迭代器,此迭代器指向反向映射中最后一个元素之后的位置。 (9)empty:如果映射为空,则返回true。
(10)size:返回映射中的元素数量。 (11)max_size:返回映射的最大长度。 (12)at:查找具有指定键值的元素。
(13)earse:从指定位置移除映射中的元素或元素范围。
(14)find:返回一个迭代器,此迭代器指向映射中其键值与指定键相等的元素的位置。 (15)swap:交换两个映射的元素。
(16)clear:清除映射的所有元素。
(17)lower_bound:返回一个迭代器,此迭代器指向映射中其键值等于或大于指定键值的第一个元素。
(18)upper_bound:返回一个迭代器,此迭代器指向映射中其键值大于指定键值的第一个元素。
(1)访问:
(2)插入:
(a)单个元素的插入:
将元素v(包括键值和映照数据)插入map容器,重复的v值不被插入。返回一个pair配对对象。
pair说明:是一个结构体类型,里面的两个成员变量的类型可以通过模板给定,在这里如果插入成功新元素,则pair中的第二个元素为bool,反之为false。
(b)给定迭代器位置插入:
将元素v(包括键值和映照数据)插入map容器,参数position只是提示可在position位置之前插入v,所以返回的插入位置视情况而定,你一定在position位置前插入。
(c)给定迭代器位置插入:
将迭代器区间[first,last)所指的数据作为容器元素(包括键值和映射数据),插入到map容器中。
(3)删除:
(a)删除给定迭代器位置的元素
用erase() 删除一个元素,传入删除元素的迭代器
(b)给定K值,进行删除
(c)删除给定范围的数据
(4)查找:
查找map中key与要查找的值相等的元素,返回对应的迭代器
相同点:底层都是使用红黑树构造的,这使得它们的查找,插入,删除的效率都非常高,并且它们都是有序的
set是单词set(集合)的意思
只有一个键值,set当中不能存储相同的键值
所有的元素都会根据元素的键值自动被排序。(底层检索使用中序遍历算法)
相关函数:
(1)begin:返回一个迭代器,此迭代器指向set中到的第一个元素。
(2)end:返回一个迭代器,此迭代器指向set最后一个元素的下一个位置。
(3)rbegin:返回一个迭代器,此迭代器指向反向set中的第一个元素。
(4)rend:返回一个迭代器,此迭代器指向反向set中最后一个元素之后的位置。
(5)cbegin:返回一个常量迭代器,此迭代器指向set中到的第一个元素。
(6)cend:返回一个迭代器,此迭代器指向set最后一个元素的下一个位置。 (7)clear:清除set的所有元素。
(8)crbegin:返回一个常量迭代器,此迭代器指向反向set中的第一个元素。
(9)crend:返回一个常量迭代器,此迭代器指向反向set中最后一个元素之后的位置。
(10)find:返回一个迭代器,此迭代器指向set中其键与指定键相等到的元素的位置。
(11)insert:将元素或元素范围插入到set中的指定位置。 (12)size:返回set中元素的数量。
(13)swap:交换两个set的元素。
(1)插入(正向遍历):
采用insert()方法把元素插入到集合中,一般按元素值从小到大插入。使用前向迭代器对集合中序遍历,结果正好是元素排序后的结果。
#include<iostream> #include<set> using namespace std; int main() { set<int> s;//创建set集合对象 s.insert(5); s.insert(1); s.insert(6); s.insert(3); s.insert(5);//重复插入5,会失效 set<int>::iterator it;//定义前向迭代器 for(it = s.begin();it!=s.end();it++) { cout<<* it<<" "; } cout<<endl; return 0; }
输出:1 3 5 6
(2)反向遍历:
使用反向迭代器reverse_iterator可以反向遍历集合,输出的结果正好是集合元素的反向排序结果。它需要用到rbegin()和rend()两个方法,它们分别给出了反向遍历的开始位置和结束位置。
#include<iostream> #include<set> using namespace std; int main() { set<int> s;//创建set集合对象 s.insert(5); s.insert(1); s.insert(6); s.insert(3); s.insert(5);//重复插入5,会失效 set<int>::reverse_iterator rit;//定义反向迭代器 for(rit = s.rbegin();rit!=s.rend();rit++) { cout<<* rit<<" "; } cout<<endl; return 0; }
输出:6 5 3 1
(3)删除:
int main() { set<int> T; int arr[10]={1,2,3,4,5,6,7}; T.insert(arr,arr+6); cout<<"遍历T:"<<" "; set<int>::iterator it1 = T.begin(); while(it1 != T.end()) { cout<< *it1<<" "; ++it1; } cout<<endl; //(1)删除一个节点,找到键值为2的迭代器 set<int>::iterator it2 = T.find(2); //然后删除该节点 T.erase(it2); cout<<"删除节点2:"<<" "; it1=T.begin(); while(it1 != T.end()) { cout<< *it1<<" "; ++it1; } cout<<endl; //(2)删除一个迭代器区间 it2 = T.find(3); T.erase(it2,T.end()); cout<<"删除3后面的节点"<<" "; it1 = T.begin(); while(it1 != T.end()) { cout<< *it1<<" "; ++it1; } cout<<endl; //(3)删除set的所有元素 T.clear(); cout<<"删除所有元素:"<<" "; it1 = T.begin(); while(it1 != T.end()) { cout<< *it1<<" "; ++it1; } cout<<endl; }
(4)查找:
使用find()方法对集合进行检索,如果找到查找的键值,返回该键值的迭代器位置,否则返回集合最后一个元素后面的一个位置,即end()。
int main() { set<int> T; int arr[10]={1,2,3,4,5,6,7}; T.insert(arr,arr+6); set<int>::iterator it; it = T.find(6); //查找键值为6的元素 if(it != T.end()) cout << *it << endl; else cout << "not find it" << endl; it = T.find(20); //查找键值为20的元素 if(it != T.end()) cout << *it << endl; else cout << "not find it" << endl; return 0; }
map用法介绍:
Map是单词mapping(映射)的缩写
(1)内部存储有两个部分,一个是固定的键值,另一个关键字是记录该关键字的状态(大小,翻译,对应关系等)
(2)由于map容器底层是使用搜索树来存储数据的,所以只要数据不能够相互比较大小就不能使用map存储。
相关函数
(1)begin:返回一个迭代器,此迭代器指向映射中的第一个元素 (2)end::返回超过迭代器末尾
(3)rbegin:返回一个迭代器,此迭代器指向反向映射中的第一个元素
(4)rend:返回一个迭代器,此迭代器指向反向映射中的最后一个元素之后的位置。
(5)cbegin:返回一个常量迭代器,此迭代器指向映射中的第一个元素。 (6)cend:返回一个超过末尾的常量迭代器。
(7)crbegin:返回一个常量迭代器,此迭代器指向反向映射中的第一个元素。
(8)crend:返回一个常量迭代器,此迭代器指向反向映射中最后一个元素之后的位置。 (9)empty:如果映射为空,则返回true。
(10)size:返回映射中的元素数量。 (11)max_size:返回映射的最大长度。 (12)at:查找具有指定键值的元素。
(13)earse:从指定位置移除映射中的元素或元素范围。
(14)find:返回一个迭代器,此迭代器指向映射中其键值与指定键相等的元素的位置。 (15)swap:交换两个映射的元素。
(16)clear:清除映射的所有元素。
(17)lower_bound:返回一个迭代器,此迭代器指向映射中其键值等于或大于指定键值的第一个元素。
(18)upper_bound:返回一个迭代器,此迭代器指向映射中其键值大于指定键值的第一个元素。
(1)访问:
int main() { map<int,int> T; T[0] = 1; T[1] = 2; T[2] = 3; T[3] = 4; //cout<<"键值为2的元素:"<<endl; //cout<<T.at(2)<<endl;//c++11不支持 cout<<"依次遍历"<<endl; map<int,int>::iterator it=T.begin();//map中第一个元素位置的迭代器 while(it!=T.end()) { cout<<it->first<<"->"<<it->second<<endl; ++it; } cout<<"find一个元素的迭代器并且访问它:"<<endl; cout<<T.find(3)->first<<"->"<<T.find(3)->second<<endl; }
(2)插入:
(a)单个元素的插入:
pair<iterator,bool>insert(const value_type&v)
将元素v(包括键值和映照数据)插入map容器,重复的v值不被插入。返回一个pair配对对象。
pair说明:是一个结构体类型,里面的两个成员变量的类型可以通过模板给定,在这里如果插入成功新元素,则pair中的第二个元素为bool,反之为false。
(b)给定迭代器位置插入:
iterator insert(iterator position,const value type& v)
将元素v(包括键值和映照数据)插入map容器,参数position只是提示可在position位置之前插入v,所以返回的插入位置视情况而定,你一定在position位置前插入。
(c)给定迭代器位置插入:
void insert(InputIterator first,InputIterator last)
将迭代器区间[first,last)所指的数据作为容器元素(包括键值和映射数据),插入到map容器中。
(3)删除:
(a)删除给定迭代器位置的元素
用erase() 删除一个元素,传入删除元素的迭代器
void erase(iterator opsition);
(b)给定K值,进行删除
size_type erase(const key_type& k);
(c)删除给定范围的数据
void erase(iterator first,iterator last);
(4)查找:
查找map中key与要查找的值相等的元素,返回对应的迭代器
相同点:底层都是使用红黑树构造的,这使得它们的查找,插入,删除的效率都非常高,并且它们都是有序的
相关文章推荐
- 总结map和set增删查改的使用
- map和set增删查改
- 【java随记】——Collection集合之六大接口(Collection、Set、List、Map、Iterator和Comparable)
- 常用数据结构 List set map
- JSTL遍历数组,List,Set,Map等集合
- JAVA的容器---List Map Set
- Set,List,Map,Vector,ArrayList的区别
- List 、Map、Set 区别
- List, Set, Map是否继承自Collection接口?
- List、Map、Set三个接口,存取元素时,各有什么特点?
- 《partner4java 讲述 java基础》之第一步:list 、set 、map 粗浅性能对比分析
- List,Set,Map用法以及区别
- 初始集合框架 List Map Set
- Collection,List,Set和Map用法和区别
- hash_map 与 hash_set 详解
- STL容器用法速查表:list,vector,stack,queue,deque,priority_queue,set,map
- Java学习笔记(十一)--Set集合 Map集合
- map与set
- 关于 std::set/std::map 的几个为什么