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次,并不是真的顺着题目的意思生成额外带数字的昵称。统计个数,仅此而已。

原文地址:https://www.cnblogs.com/reshuffle/p/12172478.html