学习笔记-数据结构与算法 红黑树(set,map),图,PAIR

本文介绍了C++中红黑树作为有序集合的去重机制,展示了如何使用set进行插入、删除及查找操作。接着讲解了map作为高级数组的实现,以及如何进行键值对的插入和查询。最后,讨论了pair的使用,包括赋值和访问其元素的方法。这些数据结构和算法在实际编程中有着广泛应用。
摘要由CSDN通过智能技术生成

1. 红黑树

1.1 set 自带去重机制的有序集合
自带去重机制的有序集合set< int> a
插入元素s.insert(a)
第一个元素(最小值)*a.begin()
最后一个元素(最大值)*a.rbegin()
删除s.erase(2)

	#include <bits/stdc++.h>
	using namespace std;
	int s[5]={1,6,8,7,7};
	int main(){
		set<int> a;
		for(auto g:a) s.insert(a);//插入元素
		cout << *a.begin() <<endl;//第一个元素(最小值)
		cout << *a.rbegin() <<endl;//最后一个元素(最大值)
		s.erase(2);//删除
		for(auto g:s) cout << g <<" ";//输出
		
	}
1.2 map 高级数组

ps:可以定义其他类型下标的数组

高级数组map<string,string> m
插入一个键值对 (id 相同 相当于修改 id 不同 相当于插入 )m[id] = name
询问m.find(id) == m.end()
#include<bits/stdc++.h>
using namespace std;
map<string,string> m;
int main()
{
    // ID to 姓名
    int n; cin >> n;
    for (int i = 1 ; i <= n ; i++){
        string id , name;
        cin >> id >> name;
        // 插入一个键值对
        // id 相同 相当于修改
        // id 不同 相当于插入
        m[id] = name;
    }
    // 假设我们有q次询问.每次询问一个id,问他的姓名
    int q; cin >> q;
    for (int i = 1 ; i <= q ; i++){
        string id ; cin >> id;
        if (m.find(id) == m.end()){
            cout << "没有此id" << endl;
            continue;
        }
        cout << m[id] <<endl;
    }
    return 0;
}

1.3 pair
ps: 组合x,y为pair类型

组合x,ypair<int,int>
赋值make_pair(x , y)
访问第一维度a.first
访问第二维度a.second
#include<bits/stdc++.h>
using namespace std;
// pair
map<pair<int,int>,int> a;
int main()
{
    int q; cin >>q;
    for (int i = 1 ; i <= q ; i++){
        int x , y , c;
        cin >> x >> y >> c;
        pair<int,int> b;
        b = make_pair(x , y);
        a[b] += c;
    }
    int m; cin >> m;
    for (int i = 1 ; i <= m ; i++){
        int x , y; cin >> x >> y;
        cout << a[make_pair(x , y)] << endl;
    }
    return 0;
}


2. 图

2.1 存图
1)点比较少 n<=1000
	二维数组(邻接矩阵)
	m[n][n];  m[i][j] =c;
2)点多,边少
	矢量型邻接矩阵
	vector<pair<int,int>> e[10005];
	e[i].first
	e[i].second
#include <bits/stdc++.h>
using namespace std;
vector<int> e[10005];
vector<pair<int,int>> e[10005];
int main(){

	return 0 ;
}

3.访问—遍历

3.1 DFS
3.3.1 递归

1)干什么
2)递归出口:终止
3)转移

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爪蛙毁一生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值