STL

vector

定义

#include<vector>
using namespace std;
vector<数据类型>数组名称

方法总结

push_back()   在末尾加入一个元素
pop_back()     在末尾弹出一个元素
size()		   获取长度
clear()			清空

- 高级用法
1.不仅可以放基本的数据结构,还可以存储自定义数据类型,例如结构体等等。
2.构造函数

int n=10;
vector<int>a(n,1);

这段代码调用了构造函数,第一个参数表示动态数组的长度,第二个参数表示数组里面每个元素的值,如果不传入第二个参数那么初始值为0。

二维动态数组
定义:

vector<vector<int> >a;

快速构造一个n行m的动态数组

vector<vector<int> >a(n,vector<int>(m,0));
//此处的初始值为0

集合set

定义

#include<set>
using namespace std;
set<string>a;
//定义了一个string类型的集合a

方法

insert()	插入一个元素		O(log n)
erase()		删除一个元素		O(log n)
count()		统计集合中某个元素的个数 O(log n)	
size()		获取元素个数		O(1)
clear()		清空			O(n)

遍历元素
c++可以通过迭代器访问集合的每个元素。通过*操作可以获取迭代器指向的元素。通过++,–可以指向上(下)一个元素。
写法:set<int>::iterator it
begin函数返回容器中起始元素的迭代器,end函数返回容器的尾后迭代器。

#include <set>
#include <string>
#include <iostream>
using namespace std;
int main() {
    set<string> country;  
    country.insert("China"); 
    country.insert("America"); 
    country.insert("France"); "America", "France"}
    for (set<string>::iterator it = country.begin(); it != country.end(); it++) {
        cout << *it << endl;
    }
    return 0;
}

在这里插入图片描述
set中的元素不会重复,set自带排序。
结构体集合
由于set自带排序,所以使用结构体set时,要在结构体里面定义一个重载了小于符号的

#include <iostream>
#include <set>
using namespace std;
struct Point{
    int x,y;
    bool operator<(const Point &rhs)const{
        if(x==rhs.x){
            return y<rhs.y;
        }else {
            return x<rhs.x;
        }
    }
};
int main() {
    int n;
    set<Point> v;
    cin>>n;
    for(int i=0;i<n;i++){
        Point temp;
        cin>>temp.x>>temp.y;
        v.insert(temp);
    }
    for(set<Point>::iterator it = v.begin();it!=v.end();it++){
        cout<<it->x<<" "<<it->y<<endl;
    }
        
    return 0;
}

例如这样,< 表示要重载的运算符,以上代码表示优先x从小到大排序,如果x相同,那么再按照y从小到大排序。

bool operator<(const Point &rhs)const

映射map

定义:

#include<set>
using namespace std;
set<t1,t2>a;

方法

inset()		插入一对映射		O(log n)
count()		判断关键词是否存在	O(log n)
size()		获取映射对的个数		O(1)
clear()		清空 O(n)

插入一对映射
insert()函数的参数是一个pair
pair定义在头文件utility里面,可以看成是有两个成员变量first,second的结构体,并且重载了<运算符(先比较first的大小,再比较second)。make_pair(v1,v2)函数返回由v1,v2,初始的pair

#include <map>
#include <string>
#include <utility>
using namespace std;
int main() {
    map<string, int> dict;              // dict 是一个 string 到 int 的映射,存放每个名字对应的班级号,初始时为空
    dict.insert(make_pair("Tom", 1));   // {"Tom"->1}
    dict.insert(make_pair("Jone", 2));  // {"Tom"->1, "Jone"->2}
    dict.insert(make_pair("Mary", 1));  // {"Tom"->1, "Jone"->2, "Mary"->1}
    dict.insert(make_pair("Tom", 2));   // {"Tom"->1, "Jone"->2, "Mary"->1}
    return 0;
}

dict.insert(make_pair(“Tom”, 1)); 这句话也可以直接用下表表示,dict[“Tom”]=1,这样用下标的方式更常见。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章