c++ map vector set sort 自定义

在这里插入图片描述

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];
  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值