(1)string变量无法像直接输入整数那样方便的使用 scanf()函数输入,c语言类型的字符串char a[100],这种才可以用%s读入 因为string并非是C的原生类型。但是是可以做到让scanf输入string类型的数据。
不建议使用 scanf 输入string类型字符串,用cin可以
(2)对于要存下来的复杂不同数据类型,可以考虑结构体
也可以用map,map按照Key值自动进行排序,如果用string类型作为key,就是按字典序递增排序,按key值排序有个缺点:即当插入的有多个相等的值时,由于key的唯一性,会只保留一个,
字典类型又被称为关联数组,但其不同之处在于字典结构的下标不必是整数,而hash map可以是任意类型,键(key)和值(value)的数据类型可以不同。但是字典中的key只能存在一个,即必须唯一
在需要元素有序性或者对单次查询性能要求较为敏感时,请使用map,其余情况下应使用unordered_map。
因此在需要使用字典结构进行算法编程的大部分情况下,都需要使用unordered_map而不是map。
求1-n连续几个数的和可以利用等差数列求和公式,s=[(a1+an)n]/2;
重载map比较函数:
struct cmp{//重载map的key值排序方式
bool operator()(const string& x,const string& y){
if(x.length()==y.length())//一样长的话,字符串比较,大的数更大
return x > y;
return x.length()>y.length();//更长的数字更大
}
};
map<string,int,cmp>mp;
- 让map实现按value值排序
typedef pair<string,int> PAIR;
//比较函数
bool cmp_by_value(const PAIR& lhs, const PAIR& rhs) {
return lhs.second < rhs.second;
}
int main() {
map<string, int> name_score_map;
name_score_map["LiMin"] = 90;
name_score_map["ZiLinMi"] = 79;
name_score_map["BoB"] = 92;
name_score_map.insert(make_pair("Bing",99));
name_score_map.insert(make_pair("Albert",86));
//把map中元素转存到vector中
vector<PAIR> name_score_vec(name_score_map.begin(), name_score_map.end());
sort(name_score_vec.begin(), name_score_vec.end(), cmp_by_value);
————————————————
#include <iostream>
#include <math.h>
#include <map>//按键值即字符串的字典序排序,用map
using namespace std;
const int N=1e5+10;
string S;
int n,cnt;
map<string,int>M;
int main()
{
int maxx=0; //记录每个序列中最长的次数
cin>>S>>n;
int l=S.length();
while(n--){
string c;
cin>>c;
cnt=0;//记录每个序列出现的次数
int lc=c.length();
for(int i=0;i<l-lc+1;i++){
if(c[0]==S[i]){
if(c==S.substr(i,lc))//每次从i开始匹配
cnt++;
}
}
M[c]=cnt;
maxx=max(maxx,cnt);
}
cout<<maxx<<endl;
for(auto t:M){
if(t.second==maxx)
cout<<t.first<<endl;
}
return 0;
}