map容器学习笔记及代码

3.8 map/multimap容器
3.8.1 map/multimap基本概念
Map的特性是,所有元素都会根据元素的键值自动排序,Map所有的元素都是pair,同时拥有实值和键值,pair的第一元素被视为键值,第二元素被视为实值,map不允许两个元素有相同的键值。
我们可以通过map的迭代器改变map的键值吗?答案是不行,因为map的键值关系到map元素的排列规则,任意改变map键值将会严重破坏map组织,如果想要修改元素的实值,那么是可以的。
Map和list拥有相同的某些性质,当对她的容器元素进行新增或者删除操作时,操作之前的所有迭代器,在操作完成之后依然有效,当然被删除的那个元素的迭代器必然是个例外。
Multimap和map的操作类似,唯一的区别multimap键值可重复。
Map和multimap都是以红黑树为底层实现机制。
5. map容器
5.1每个元素 都是一个pair
5.2 对于map而言key是不可以重复
5.3 multimap可以
5.4 4种插入方式
5.5 count统计map 0 或 1 multimap 可能大于1
5.6 排序规则自己

`
    #include 
    #include 
    
    using namespace std;
    
    /*
    3.8.2.1 map 构造函数
    mapmapTT;//map默认构造函数
    map(const map&map) ;//拷贝构造函数
    
    3.8.2.2 map 赋值操作
    map&operator=(const map&map);//重载等号操作
    swap(mp);//交换两个集合容器
    
    3.8.2.3 map大小操作
    size();//返回容器中元素的数目
    empty();//判断容器是否为空
    
    3.8.2.4 map插入数据元素操作
    map.insert(...);//往容器插入元素,返回pair
    mapmapSu;
    //第一种 通过pair的方式插入对象
    mapStu.insert(pair)(3,"小张");
    //第二种 通过pair的方式插入对象
    mapStu.insert(make_pair(-1,"校长"));
    //第三种 通过value_type的方式插入对象
    mapStu.insert(map::value_type(1,"小李"));
    //第四种 通过数组的方式插入值
    mapStu[3]="小刘";
    mapStu[5]="小王"; 
    */
    
    
    void test01()
    {
    	mapm;
    	//插入值
    	//4种方式
    	//第一种
    	m.insert(pair(1,10));
    	//第二种(推荐)
    	m.insert(make_pair(2,20));
    	//第三种(最不推荐)   
    	m.insert(map::value_type(3,30));
    	//第四种  如果能保证key存在,可以通过【】访问 
    	m[4]=40;
    	
    	cout<::iterator it=m.begin() ;it!=m.end() ;it++)
    	{
    		cout<<"key:"<first<<"	value:"<second<=keyElem元素的迭代器
     upper_bound(keyElem);//返回第一个key>keyElem元素的迭代器
     equal_range(keyElem);//返回容器中key与keyElem相等的上下限的两个迭代器
      */
    
    void test02()
    {
    	mapm;
    	m.insert(pair(1,10));
    	m.insert(make_pair(2,20));
    	m.insert(map::value_type(3,30));
    	m[4]=40;
    	
    	m.erase(1); 
    	for(map::iterator it=m.begin() ;it!=m.end() ;it++)
    {
    	cout<<"key:"<first<<"	value:"<second<::iterator pos=m.find(2);
     	if(pos!=m.end() )
     	{
     		cout<<"找到,key:"<first<<"	value:"<second<first<<"	value:"<second<keyElem元素的迭代器
    	 ret=m.upper_bound(3);
    	 if(ret!=m.end() )
    	 {
    	 	cout<<"upper_bound中key:"<< ret->first<<"	value:"<second<::iterator,map::iterator>ret2= m.equal_range(3) ;
    	
    	if(ret2.first!=m.end() )
    	{
    		cout<<"找到了equal_range 中的lower_bound的key"<first <<"	value:"<second<first <<"	value:"<second<v2;
    		}
    };
    
    
    void test03()
    {
    	//从大到小排序 
    	mapm;
    	m.insert(pair(1,10));
    	m.insert(make_pair(2,20));
    	m.insert(map::value_type(3,30));
    	m[4]=40;
    	
    	for(map::iterator it=m.begin() ;it!=m.end() ;it++)
    	{
    		cout<<"key:"<first<<"	value:"<second<

你可能感兴趣的:(学习笔记)