vector

定义于头文件 <vector>,是封装动态数组的顺序容器。

一、成员函数

1、构造函数
vector<string> words1;//创建一个空vector
vector<string> words2={"the", "frogurt", "is", "also", "cursed"};//创建一个vector并初始化
vector<string> words3(count,value);//构造拥有 count 个有值 value 的元素的容器,默认value=0
2、元素访问
cout<<word2[1]<<word2.at(2)<<word2.front()<<word2.back();
3、迭代器
*i //迭代器访问元素
iterator begin():返回向量头指针,指向第一个元素 
iterator end():返回向量尾指针,指向向量最后一个元素的下一个位置 
reverse_iterator rbegin():反向迭代器,指向最后一个元素
reverse_iterator rend():反向迭代器,指向第一个元素之前的位置
reference front():返回当前vector容器中起始元素的引用
reference back():返回当前vector容器中末尾元素的引用
4、容量
bool empty() const:判断向量是否为空,若为空,则向量中无元素
int size() const:返回向量中元素的个数
5、修改器
void push_back(const T& x):向量尾部增加一个元素X
void pop_back():删除向量中最后一个元素
void clear():清空向量中所有元素


二、访问方法

1、下标访问
for(int i=0;i<vec.size();i++)
	cout<<vec[i]<<endl;
2、迭代器访问
for(auto it=vec.begin();it!=vec.end();it++)
    cout<<*it<<endl;
3、快速访问
for(auto &x:vec)
	cout<<x<<endl;


三、算法

使用时需要包含头文件<algorithm>

sort(a.begin(),a.end(),cmp);//对a中的从a.begin()(包括)到a.end()(不包括)的元素按cmp进行排列,如果没有第三个参数,默认为升序
//如果需要降序排序,需要加入比较函数compare()
bool compare(int a,int b){
    return a>b;
}
//通过compare(),可以对更复杂的数据类型进行自定义的排序
reverse(a.begin(),a.end());//对a中的从a.begin()(包括)到a.end()(不包括)的元素倒置


map和unordered_map

map 是有序键值对关联容器,定义于头文件 <map>,它的元素的键是唯一的。 map 通常实现为红黑树。搜索、移除和插入操作拥有对数复杂度。map的key需要定义operator<
unordered_map 是关联容器,定义于头文件<unordered_map>,含有带唯一键的键-值 pair 。元素在内部不以任何特定顺序排序,而是组织进桶中。元素放进哪个桶完全依赖于其键的哈希。这允许对单独元素的快速访问,因为一旦计算哈希,则它准确指代元素所放进的桶。搜索、插入和元素移除拥有平均常数时间复杂度。unordered_map的key需要定义hash_value函数并且重载operator==
主要功能:map就像一个字典,为键值对提供索引,可以用来计数
map和unordered_map的使用大致相同


一、成员函数

1、构造函数
map<int,int> map1;//默认构造函数
map<int,int> map2(map1);//复制构造函数
2、元素访问
cout<<map2.at(3);//返回到拥有等于 key 的关键的元素被映射值的引用。若无这种元素,则抛出 std::out_of_range 类型异常。
cout<<map1[4];//若不存在拥有关键 key 的元素,则为到新元素被映射值的引用。否则为到既存的关键等价于 key 的元素的被映射值的引用。
3、迭代器
iterator begin():返回向量头指针,指向第一个元素 
iterator end():返回向量尾指针,指向向量最后一个元素的下一个位置 
reverse_iterator rbegin():反向迭代器,指向最后一个元素
reverse_iterator rend():反向迭代器,指向第一个元素之前的位置

unordered_map<int, int> cnt;
for (auto &[_, m] : cnt) {//尽量多用快速访问方式
	ans += m * (m - 1);
}
4、容量
bool empty() const:判断向量是否为空,若为空,则向量中无元素
int size() const:返回向量中元素的个数
5、修改器
map1.insert(pair<int, int>(2, 0));//向map1中插入键值对(2,0)
void clear();//清空向量中所有元素
void erase( iterator pos );

unordered_map<int, int> cnt;
for (auto &q : points) {
	int dis = (p[0] - q[0]) * (p[0] - q[0]) + (p[1] - q[1]) * (p[1] - q[1]);
	++cnt[dis];//默认初始值为0
}
6、查找
auto iter = map.find(2);//用find函数来定位数据出现位置,它返回的一个迭代器,当数据出现时,它返回数据所在位置的迭代器,如果map中没有要查找的数据,它返回的迭代器等于end函数返回的迭代器。
cout<< iter->first << " " << iter->second;//输出该键值对


二、插入方法

1、用insert函数插入pair数据
pair<map<int, string>::iterator, bool> Insert_Pair;
Insert_Pair = map1.insert(pair<int, int>(7, 1));//通过pair的第二个变量来知道是否插入成功,它的第一个变量返回的是一个map的迭代器,如果插入成功的话Insert_Pair.second应该是true的,否则为false。
2、用数组方式插入数据
map1[11]=2;//若map中有这个关键字,覆盖以前该关键字对应的值


set和unodered_set

set 是关联容器,含有 Key 类型对象的已排序集。用比较函数 比较 (Compare) 进行排序。搜索、移除和插入拥有对数复杂度。 set 通常以红黑树实现。在每个标准库使用比较 (Compare) 概念的场所,用等价关系确定唯一性
unordered_set 是含有 Key 类型唯一对象集合的关联容器。搜索、插入和移除拥有平均常数时间复杂度。在内部,元素并不以任何特别顺序排序,而是组织进桶中。元素被放进哪个桶完全依赖其值的哈希
主要功能:对集合中的元素进行去重

一、成员函数

1、构造函数
unordered_set<int> con;
unordered_set<int> container{1, 2, 3};
2、迭代器
iterator begin():返回向量头指针,指向第一个元素 
iterator end():返回向量尾指针,指向向量最后一个元素的下一个位置 
reverse_iterator rbegin():反向迭代器,指向最后一个元素
reverse_iterator rend():反向迭代器,指向第一个元素之前的位置
}
3、容量
bool empty() const:判断向量是否为空,若为空,则向量中无元素
int size() const:返回向量中元素的个数
4、修改器
container.clear();//清空所有元素
container.insert(1);//插入1
container.erase( iterator pos );
5、查找
cout<<container.count(1)<<" "<<container.count(2);//能找到返回1,否则返回0
auto search = example.find(1);//指向键等于key的元素的迭代器,否则返回end()迭代器


priority_queue

priority_queue定义于头文件<queue>,不同于queue,我们可以定义队列的优先级,使用堆实现。当需要在容器中的元素进行增删操作,并不断取出最大或最小元素时,适用于优先队列

一、成员函数

1、构造函数
priority_queue<Type, Container, Functional> pq;//Type数据类型,Container容器类型,Functional比较的方式,使用基本数据类型时默认为降序,即less<int>,如果要用升序,即greater<int>
2、元素访问
cout<<que.top();//访问队头元素
3、容量
bool empty() const:判断队列是否为空,若为空,则向量中无元素
int size() const:返回队列中元素的个数
4、修改器
void push( value_type&& value );//插入元素value,并对底层容器排序 
void pop();//从 priority_queue 移除顶元素。