STL容器之vector、set、map

vector

简介

  • vector是STL的动态数组,在运行时能改变数组大小,能存放任何类型的对象。

一、定义:

1.定义int型数组:

  1. vector<int> a;默认初始化,a为空。
  2. vector<int> b(a);用a来定义b。
  3. vector<int> a(100);有100个值为0的元素。
  4. vector<int> a(100,6);有100个值为6的元素。

2.定义string型数组:

  1. vector<string> a(10,"null");有10个值为null的元素。
  2. vector<string> vec(10,"hello");有10个值为hello的元素。

3.定义结构体型数组:

  1. cpp struct point{int x,y;}; vector<point>a;用a来储存坐标。

二、常用操作:

  1. 赋值(尾部插入):a.push_back(100);在尾部添加元素100。
  2. 元素个数:a.size();
  3. 是否为空:a.empty();
  4. 中间插入:a.insert(a.begin() + i, k);在第i个元素前面插入k。
  5. 尾部插入:a.insert(a.end(), 10, 5);在尾部插入10个值为5的元素。
  6. 删除尾部:a.pop_back();删除末尾元素。
  7. 删除区间:a.erase(a.begin() + i, a.begin() + j);删除区间[i,j-1]的元素。
  8. 删除元素:a.erase(a.begin()+2);删除第3个元素。
  9. 清空:a.clear();
  10. 翻转:reverse(a.begin(), a.end());
  11. 排序:sort(a.begin(), a.end());
  12. 调整大小:a.resize(n);数组大小变为n;

hdu 4841


set

简介

  • set是用二叉搜索树实现,集合中的每个元素只出现一次,并且都是排列好的

定义、相关操作

  1. 定义:set<Type> A;定义Type类型的set。
  2. 存放item:A.insert(item);
  3. 删除item:A.erase(item);
  4. 清空set: A.clear();
  5. 判断是否为空:A.empty();
  6. 返回元素个数:A.size();
  7. 返回一个迭代器,指向键值k:A.find(k);
  8. 返回一个迭代器,指向键值大于等于k的第一个元素:A.lower_bound(k);
  9. 返回一个迭代器,指向键值大于k的第一个元素:A.upper_bound(k);

hdu 2094

map

简介

  • map容器可以快速地实现查找。

map的具体操作:

例题:现有n个学生,每人有姓名name,学号id,现在给定一个学生的name,要求查找他的id。

#include <bits/stdc++.h>
using namespace std;
int main()
{
    ios::sync_with_stdio(false);
    map<string, int> student; //定义
    string name, stu;
    int id, n;
    cin >> n; //有n个学生
    while (n--)
    {
        cin >> name >> id;  //输入名字和id
        student[name] = id; //将两者关联
    }
    cin >> stu;                   //输入要查找的学生
    cout << student[stu] << endl; //输出id
    return 0;
}

一、常用操作:

1.插入:

方法一:pair

map<int, int> mp;//定义
mp.insert(pair<int,int>(1, 2));//插入1,2

方法二:make_pair

map<int, int> mp;
mp.insert(make_pair<int,int>(2,3));

方法三:value_type

map<int, int> mp;
mp.insert(map<int, int>::value_type(3,4));

方法四:[]

map<int, int> mp;
mp[4] = 5;

前三种方法不能出现重复键,第四种方法,若出现重复键会将其覆盖。


2.查找:

方法一:[]

	map<int, int> xx;
    xx[1] = 3;
    cout << xx[1] << endl;//输出3
    cout << xx[2] << endl;//输出0

若在map中没有该键位,则输出0。
在这里插入图片描述
方法二:map.at()

	map<int, int> xx;
    xx[1] = 3;
    cout << xx.at(1) << endl;
    cout << xx.at(2) << endl;
    return 0;

在这里插入图片描述
方法三:count()
map::count(k),返回map中k出现的次数,为0当然就表示不存在,只能用来判断k是否存在。

3、删除

方法一:删除单个键

	xx.erase(key);

方法二:通过迭代器删除

	map<int,string>::iterator iter=xx.find(key);
    xx.erase(iter);

方法三:删除两个迭代器所指向的范围 [,)左闭右开区间

	map<int,string>::iterator itera=xx.find(6);
    iter=xx.find(4);
    xx.erase(iter,itera);

方法四:删除全部

	xx.erase(xx.begin(),xx.end());
	xx.clear();

4、遍历

方法一:前序遍历 [ begin(), end() )

map<int, int> xx;
for(map<int, int>::iterator iter = xx.begin();iter != xx.end(); iter++)
	cout << xx->first << " " << xx->second << endl;

方法二:后序遍历 [ rbegin(), rend() )

map<int,string> xx;
for(map<int, int>::iterator iter = xx.rbegin();iter != xx.rend();iter++)
	cout << xx->first << " " << xx->second << endl;
发布了14 篇原创文章 · 获赞 21 · 访问量 2947

猜你喜欢

转载自blog.csdn.net/acm_durante/article/details/103949745