vector容器
vector的定义
vector<int> v1;
// 定义⼀个vector v1,定义的时候没有分配⼤⼩
cout << v1.size();
// 输出vector v1的⼤⼩,结果为0
vector<int> v1;
v1.resize(8);
//先定义⼀个vector变量v1,然后将⻓度resize为8,默认这8个元素都是0
vector<int> v(10);
// 直接定义⻓度为10的int数组,默认这10个元素值都为0
vector<int> v3(100, 9);
// 把100⻓度的数组中所有的值都初始化为0
vector访问
// 访问的时候像数组⼀样直接⽤[ ]下标访问即可(也可以⽤迭代器访问)
v[0] = 2;
cout << v[0];
//返回值:2
// vector<int>::iterator it;
for (auto it = v.begin(); it != v.end(); it++)
{
// 使⽤迭代器的⽅式访问vector
cout << *it << " ";
}
vector插入
for (int i = 0; i < 10; i++) {
a.push_back(i); // 在vector a的末尾添加⼀个元素i
}
for (int i = 0; i < b.size(); i++) {
b[i] = 15;
}
set容器
set定义
set会自动排序,自动去重
set<int> s;
s.insert(2);
s.insert(-552);
s.insert(20);
s.insert(-2);
s.insert(277);
s.insert(277);
for(auto x:s)
cout<<x<<' ';
// 输出结果 -552 -2 2 20 277
set建立
set<int> s;
// 定义⼀个空集合s
set遍历
for (auto it = s.begin(); it != s.end(); it++)
{
// ⽤迭代器遍历集合s⾥⾯的每⼀
个元素
cout << *it << " ";
}
set查找
s.find(2)
// 查找 2 这个元素 找不到返回 s.end() 找到返回迭代器
// 因为s.end()表示s的最后1个元素的下1个元素所在的位置
// 如果s 中有0~7 八个元素
|0|1|2|3|4|5|6|7|end()|
// 0的位置是begin()
s.count(2)
//找到返回true 找不到 返回false
map容器
如 map<string, int> m; 前面是键 后面是值 (和python) 中字典差不多
map 会⾃动将所有的键值对按照键从⼩到⼤排序
map初始化默认值为 < int , string > {0,“\0”}
map<string,int> q;
q["b"]=1;
q["a"]=200;
for(auto x : q)
cout << x.first << ' ' << x.second << endl;
/* 输出结果
a 200
b 1 */
for(auto& [k,v]:b)
k为键
v为值
map遍历
// ⽤迭代器遍历,输出map中所有的元素,键⽤it->first获取,值⽤it->second获取
for (auto it = q.begin(); it != q.end(); it++)
cout << it->first << " " << it->second << endl;
/* 输出结果
a 200
b 1 */
// 输出map的元素个数
cout << q.size() << endl
unordered_map 和 map (或者 unordered_set 和 set )的区别是, map 会按照键值对的键 key
进⾏排序( set ⾥⾯会按照集合中的元素⼤⼩进⾏排序,从⼩到⼤顺序),⽽ unordered_map (或者 unordered_set
)省去了这个排序的过程,如果偶尔刷题时候⽤ map 或者 set 超时了,可以考虑⽤ unordered_map (或者
unordered_set )缩短代码运⾏时间、提⾼代码效率⾄于⽤法和map 、 set 是⼀样的
sort ( ) 自定义排序
任意类型数组 ry[ ] vector map(按键排) 皆可sort
默认从小到大
struct stu { // 定义⼀个结构体stu,number表示学号,score表示分数
int number;
int score;
}st[10];
bool cmp(stu a, stu b) { // cmp函数,返回值是bool,传⼊的参数类型应该是结构体stu类型
if (a.score != b.score) // 如果学⽣分数不同,就按照分数从⼤到⼩排列
return a.score > b.score;
else // 如果学⽣分数相同,就按照学号从⼩到⼤排列
return a.number < b.number;
}
sort(st,st+10,cmp);
// st 按 定义的cmp 排序
结构体重载小于号
struct node
{
int l,r;
bool operator< (const node &w)const
{
return r<w.r;
}
}ra[N];