居然连map都忘了(恨铁不成钢)
总结一下:
举例:
map<int,int>mp;
mp[3]=5;
map<char,int>mp;
mp['a']=24;
map<string,int>mp;
mp['taylor']=1;
头文件:map
其实你知道这些就已经够了但是我还是搬了点东西过来
https://blog.csdn.net/shuzfan/article/details/53115922 用法举例
map的基本操作函数:
C++ Maps是一种关联式容器,包含“关键字/值”对
begin() 返回指向map头部的迭代器
clear() 删除所有元素
count() 返回指定元素出现的次数
empty() 如果map为空则返回true
end() 返回指向map末尾的迭代器
equal_range() 返回特殊条目的迭代器对
erase() 删除一个元素
find() 查找一个元素
get_allocator() 返回map的配置器
insert() 插入元素
key_comp() 返回比较元素key的函数
lower_bound() 返回键值>=给定元素的第一个位置
max_size() 返回可以容纳的最大元素个数
rbegin() 返回一个指向map尾部的逆向迭代器
rend() 返回一个指向map头部的逆向迭代器
size() 返回map中元素的个数
swap() 交换两个map
upper_bound() 返回键值>给定元素的第一个位置
value_comp() 返回比较元素value的函数
出自https://blog.csdn.net/allovexuwenqiang/article/details/5686583
再看reverse函数,挺好用的
头文件:algorithm
用法一:反转字符串
#include <iostream> #include <algorithm> #include <string> using namespace std; int main() { string str; cin>>str; reverse(str.begin(), str.end()); cout<<str<<endl; }
用法二:反转字符数组
#include<iostream> #include<cstring> #include<algorithm> using namespace std; int main() { char a[101]; cin.getline(a,sizeof(a)); int m=strlen(a); reverse(a,a+m); puts(a); }
例题:反转链表
给定一个常数 K 以及一个单链表 L,请编写程序将 L 中每 K 个结点反转。例如:给定 L 为 1→2→3→4→5→6,K 为 3,则输出应该为 3→2→1→6→5→4;如果 K 为 4,则输出应该为 4→3→2→1→5→6,即最后不到 K 个元素不反转。
输入格式:
每个输入包含 1 个测试用例。每个测试用例第 1 行给出第 1 个结点的地址、结点总个数正整数 N (≤105)、以及正整数 K (≤N),即要求反转的子链结点的个数。结点的地址是 5 位非负整数,NULL 地址用 −1 表示。
接下来有 N 行,每行格式为:
Address Data Next
其中 Address
是结点地址,Data
是该结点保存的整数数据,Next
是下一结点的地址。
输出格式:
对每个测试用例,顺序输出反转后的链表,其上每个结点占一行,格式与输入相同。
输入样例:
00100 6 4
00000 4 99999
00100 1 12309
68237 6 -1
33218 3 00000
99999 5 68237
12309 2 33218
输出样例:
00000 4 33218 33218 3 12309 12309 2 00100 00100 1 99999 99999 5 68237 68237 6 -1
啊这个精妙的代码!!!大佬tqlll
#include<bits/stdc++.h> #include<map> using namespace std; struct node { int now,data,next; }a[100005]; int main() { int n,k,begin,temp; cin>>begin>>n>>k; map<int,node>mp; for(int i=0;i<n;i++) { scanf("%d",&temp); scanf("%d%d",&mp[temp].data,&mp[temp].next); } for(int i=0;i<n;i++) { a[i].now=begin; a[i].data =mp[begin].data; begin= mp[begin].next; if (begin==-1) n=i+1; if ((i+1)%k==0) reverse(a+i+1-k,a+i+1);//reverse函数反转 } for(int i=0;i<n;i++) { printf("%05d %d",a[i].now,a[i].data); if (i!=n-1) printf(" %05d ",a[i+1].now); else printf(" -1"); } }