STL 常见操作

stl的操作不是很熟练, 记录一下

 

map

map默认是按照key从大到小排序的

从小到大排序,加个greater<int>

erase

    it=mymap.find('b');
    mymap.erase (it);                   // erasing by iterator

    mymap.erase ('c');                  // erasing by key

    it=mymap.find ('e');
    mymap.erase ( it, mymap.end() );    // erasing by range

 

vector:

 

lower_bound and upper_bound

 

copy

 

    vector<int> v1={1,2,3};

    vector<int> v2(v1);

    vector<int> v3=v1;

    vector<int> v4;
    v4.assign(v1.begin(),v1.end());
    
    vector<int> v5;
    copy(v1.begin(), v1.end(), back_inserter(v5)); 

 

 

resize(int n, int val=0)

如果n比原size大,那么会默认填充0,如果比原来小,那么会删除末尾的元素

 

insert

 

    vector<int> v1={1,2,3};
    vector<int> v2={11,22,33};
    auto it=v1.end();
    v1.insert(it,2);    //在末尾插入1个2,插入后后面的元素会往后移一位

    it=v1.end();    //插入后,iterator会失效
    v1.insert(it,3,999);    // 在末尾插入3个999

    it=v1.end();
    v1.insert(it,v2.begin(),v2.end());  //插入某个vector的一段值

    int myarray [] = { 501,502,503 };   //插入某个数组的一段值
    v1.insert (v1.end(), myarray, myarray+3);

    for(auto i:v1){
        cout<<i<<endl;
    }

sort:

 

sort(v1.begin(),v1.end(),[](int a, int b){return a>b;});

 

erase:

 

    v1.erase (v1.begin()+5);
    //erase the first 3 elements:
    v1.erase (v1.begin(),v1.begin()+3);

 

去重:

sort(vc.begin(),vc.end());

num.erase(unique(vc.begin(),vc.end()),vc.end());

 

priority_queue:

从小到大排:  priority_queue<int, vector<int>, greater<int> > q;

从大到小排:  priority_queue<int> q;

 

string

string[i][j]可用

srt(str,str+n),排序

 

其他

 

next(it,n)

    vector<int> v1={1,2,3,4,5,6};
    auto it=v1.begin();
    cout<<*next(it,3)<<endl;

 

next_permutation  & prev_permutation

    vector<int> vc({1,2,3});
    sort(vc.begin(),vc.end());
    for(auto i:vc){
        cout<<i<<" ";
    }
    cout<<endl;
    while(next_permutation(vc.begin(),vc.end())){
        for(auto i:vc){
            cout<<i<<" ";
        }
        cout<<endl;
    }

 

Split String

vector<string> getLines(string& input) {
    istringstream iss(input);
    string curr;
    vector<string> lines;
    while (getline(iss, curr, '\n')) lines.push_back(curr);
    return lines;
}

 

HEAP

#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <iostream>
#include <queue>
#include <algorithm>
#include <vector>
#include <set>
#include<map>
#include<stack>
#include<unordered_map>
#include<ctime>
#include<sstream>
using namespace std;
#define LL __int64
#define INF 0x3f3f3f3f
const int MAXN=20;
#define mod 1000000007
const double eps=1e-5;
int dir[4][2]={-1,0,0,1,1,0,0,-1};
using namespace std;
class MaxHeap{
public:
    vector<int> vals;
    MaxHeap(){

    }

    void addE(int val){
        vals.push_back(val);
        HeapifyUp(vals.size()-1);
    }

    void deleteE(int index){
        swap(vals[vals.size()-1],vals[index]);
        vals.pop_back();
        HeapifyDown(index);
    }

    void HeapifyUp(int i){
        while(i!=0){
            int p=(i-1)/2;
            if(vals[i]<=vals[p])   return;
            swap(vals[i],vals[p]);
            i=p;
        }
    }

    void HeapifyDown(int i){
        while(true){
            int c1=i*2+1;
            int c2=i*2+2;

            if(c1>=vals.size()) return; //no child

            int c=c2<vals.size()&&vals[c1]>vals[c2]?c1:c2;

            if(vals[c]<=vals[i])    return;

            swap(vals[i],vals[c]);
            i=c;
        }
    }

    int Max(){
        return vals.empty()?0:vals[0];
    }
    
};
int main(){
    MaxHeap m;
    m.addE(1);
    m.addE(2);
    m.deleteE(0);
    cout<<m.Max()<<endl;
}
View Code

 

posted @ 2015-07-27 14:18  miao_a_miao  阅读(360)  评论(0编辑  收藏  举报