zoukankan      html  css  js  c++  java
  • stl拾撷——set&map

    一、操作

    兼容auto等

    tools-->compiler options-->"-std=c++11"


    set,iterator

    //reference: https://blog.csdn.net/sunshinewave/article/details/8068326
    #include <iostream>
    #include <algorithm>
    #include <set> 
    using namespace std;
     
     int main()
     {
        set<int> s;   
        set<int>::iterator first;
        set<int>::iterator second;
        
        //插入 
     	for(int i = 1 ; i <= 10 ; ++i)
     	{
     	    s.insert(i);
     	}
     	//第一种删除
     	s.erase(s.begin()); 	
     	
     	
     	//第二种删除
     	first = s.begin();
     	second = s.begin();
     	second++;
     	s.erase(first,second);
     	
     	
     	//第三种删除
     	s.erase(8);
     	
     	
     	//判断是否在集合中
    	 if (s.count(11)!=1) cout<<'N';
    	 if (s.find(10)!=s.end()) cout<<'Y'; 
    	 cout<<endl;	 
     	
     
     	//第二种插入 
     	int a[] = {1,2};//cout<<a[3]----> "3960616" 
    	s.insert(a,a+2);
    	
    	
    	////最后的数据刚好是从1到10,中间只少了个8//// 
    	
    	//反向输出 
     	set<int>::reverse_iterator riter;
     	for(riter = s.rbegin() ; riter != s.rend() ; ++riter)
     	{
     	    cout<<*riter<<" ";
     	} 
     	cout<<endl;	 
    	 
    	 //正向输出 
     	for(auto iter = s.begin();iter != s.end(); ++iter)
     	{
     	    cout<<*iter<<" ";
     	}   
     	cout<<endl; 	
     	
    
    
     	int b[8]={4,10,11,12,69,70,96,100};
            int low=lower_bound(b,b+8,11)-b;//>=
            int up=upper_bound(b,b+8,11)-b;//>
            cout<<low<<up<<endl; 	
     	return 0;
    }
    

    map,pair

    //reference: https://blog.csdn.net/wu_lai_314/article/details/8440550
    #include <iostream>
    #include <algorithm>
    #include <string>
    #include <utility>
    #include <map> 
    using namespace std;
     
     int main()
     {
        map<string,int> s;
        map<string,int>::iterator iter;      
        
     	s["one"]=1;
     	
    	pair<string,int> couple("two",3);
    	couple.second=2;
    	s.insert(couple);
     	
     	for(iter = s.begin(); iter != s.end(); iter++)
        	cout<<iter->first<<" "<<iter->second<<endl;
        cout<<s["one"]<<endl;
        
        iter = s.find("two");
        cout<<iter->first<<" "<<iter->second<<endl;
        
        iter = s.find("three");
        if (iter==s.end()) cout<<"404"<<endl;
     	return 0;
    }
    

    二、map的题

    http://codeforces.com/problemset/problem/501/B

    路径压缩题。
    若对象是整数,可用并查集。不是,可用map

    设s1改名为s2,此时map[s1]=s2.然后s2又改名为s3
    直接思路是查找s2(值)是否出现过,若是,将s2(值)对应的s1(关键字)的值改为s3.但这样遇到的障碍是我们没有快速查找map中给定的值有无出现过的方法。
    妙在逆向思维。我们颠倒过来令map[s2]=s1,问题解决。


    http://codeforces.com/problemset/problem/4/C

    对于abacada1,本质是abacada重复了1次,并不是真的顺着题目的意思生成额外带数字的昵称。统计个数,仅此而已。

  • 相关阅读:
    【蓝桥杯】基础练习 十六进制转十进制
    【蓝桥杯】 基础练习 十六进制转八进制
    【蓝桥杯】 入门训练 序列求和
    【蓝桥杯】 入门训练 圆的面积
    【蓝桥杯】入门训练 Fibonacci数列
    6次考试小结
    搜索
    sudoku
    生日蛋糕
    木棒
  • 原文地址:https://www.cnblogs.com/reshuffle/p/12172478.html
Copyright © 2011-2022 走看看