常用代码用法

const int a = 10; 必须在定时义初始化,之后不能修改。

>>1为右移操作符  找到l和r之间的基准值

for (auto it = arr[i].rbegin(); it != arr[i].rend() && *it == '0'; ++it)   //寻找前导 0

string arr[MAXN];

arr[i].rbegin()   返回字符串末尾

arr[i].rend()     返回倒叙开头

sort(zrr, zrr + n);    //从小到大排序
reverse(zrr, zrr + n);   //反转函数 变成了从大到小

//        当 i 是奇数时,它的二进制表示中最右边的位是 1。
//        因此,i & 1 的结果是奇数时为 1(真),偶数时为 0(假)。

unordered_map 是一种基于哈希表实现的关联容器


它存储了键值对(key-value pairs)
包括声明、初始化、插入、查找、更新、删除、遍历、检查存在性、获取大小和清空容器。
使用 std::unordered_map 可以有效地处理键值对数据,尤其是在需要快速访问元素时。
int k = t.find('x');    //查找是的第几个出现的(0为初始点)

简单来说可以用数字指针到某一个字符串

unordered_map s2t;

unordered_map t2s;

建立字符串之间的映射

if (myMap.count(key))

{

      // 键存在 //检查是否存在于映射中

}

哈希值的计算

int t = (x % N + N) % N;  
1. x%N 防止x过大超出范围
2. +N 防止x是负数
3. 确保最终的索引值在 0~N-1 范围

哈希函数的基 131  (记忆)

 u >>= 1;  右移运算符  


相当于将数值 u 除以 2 并取整。如果 u 是一个正数或零,右移操作通常有以下效果:
 
如果 u 是偶数,右移一位后数值变为 u / 2。
 
如果 u 是奇数,右移一位后数值变为 (u - 1) / 2,因为奇数减1会变为偶数。
 
 


堆(Heap)

操作的上下文中,u >>= 1;
通常用于将节点索引除以2,以计算其父节点的索引。

cin >> n >> p + 1 >> m >> s + 1;     从第二个位置开始读取字符

priority_queue<int, vector<int>, greater<int>> heap;

  • 第一个参数 int 表示优先队列存储的元素类型。
  • 第二个参数 vector<int> 表示用于存储元素的容器类型。这是 priority_queue 的默认容器类型,但你也可以使用其他类型的容器。
  • 第三个参数 greater<int> 是一个比较函数对象,它定义了元素之间的比较规则。

最大堆:priority_queue<int> max_heap;  //默认是最大堆

操作

push (value)

pop ()

top ():取顶端元素

empty (): 判断是否为空   如果是则为true

size ():  元素数量

swap (priority_queue& other)

clear ():清空

range[i] = {l, r};   
        //l 和 r 是两个整数,它们分别赋值给 range[i].l 和 range[i].r
        //这种方法更加简洁

abs()代表绝对值   可用作计算区间距离

//初始化

pair<int, int> p1(1, 2);

int first = p1.first; // 获取第一个元素

int second = p1.second; // 获取第二个元素

vector<int> a(n,1);   

创建一个长度为n的向量a,初始值都为1

邻接表的使用方法

const int N = 100010;
vector<int> tree[N];

void addEdge(int a, int b) {
    tree[a].push_back(b); // 从 a 到 b 的边
    tree[b].push_back(a); // 如果是无向图,还需要从 b 到 a 的边
}


for (int i = 0; i < N; i++) {
        cout << "Node " << i << " is connected to: ";
        for (int j : tree[i]) {
            cout << j << " ";
        }
        cout << endl;
    }//打印出来

/*

栈:后进先出(类似装钢镚)

std::stack<int> myStack;  //创立栈

myStack.push(10);    //添加

myStack.top()    //查看栈顶

myStack.pop()    //除去栈顶

if (!myStack.empty())  //检查栈是否为空

队列:后进后出(往尾巴后面添加)

std::queue<int> myQueue;

myQueue.push(10);   //只能往后边添加

myQueue.front()   //检查队首

myQueue.pop();   //移除队首

if (!myQueue.empty())   //检查是否为空


 

*/


 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值