c++ map vector set sort 自定义

c++ map vector set sort 自定义,第1张

c++ map vector set sort 自定义

文章目录
    • vector容器
        • vector的定义
        • vector访问
        • vector插入
    • set容器
        • set定义
        • set建立
        • set遍历
        • set查找
    • map容器
        • map遍历
    • sort ( ) 自定义排序

vector容器 vector的定义
 vector v1;
  // 定义⼀个vector v1,定义的时候没有分配⼤⼩
 cout << v1.size(); 
 // 输出vector v1的⼤⼩,结果为0
 vector v1;
 v1.resize(8); 
 //先定义⼀个vector变量v1,然后将⻓度resize为8,默认这8个元素都是0
vector v(10); 
// 直接定义⻓度为10的int数组,默认这10个元素值都为0
vector v3(100, 9);
// 把100⻓度的数组中所有的值都初始化为0
vector访问
// 访问的时候像数组⼀样直接⽤[ ]下标访问即可(也可以⽤迭代器访问)
v[0] = 2;
cout << v[0];
//返回值:2
// vector::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 s;
s.insert(2);
s.insert(-552);
s.insert(20);
s.insert(-2);
s.insert(277);
s.insert(277);
for(auto x:s)
  cout< 
set建立 
set 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() 
map容器

如 map m; 前面是键 后面是值 (和python) 中字典差不多
map 会⾃动将所有的键值对按照键从⼩到⼤排序

map初始化默认值为 < int , string > {0,""}

map q;
q["b"]=1;
q["a"]=200;
for(auto x : q)
   cout << x.first << ' ' << x.second << endl;

map遍历
// ⽤迭代器遍历,输出map中所有的元素,键⽤it->first获取,值⽤it->second获取
 for (auto it = q.begin(); it != q.end(); it++)
 cout << it->first << " " << it->second << endl;
 
 // 输出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 排序

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5634682.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存