stl库

简介: stl库

sort

读入n条学生成绩记录,包括学生姓名,总成绩,语文,数学和英语成绩,要求按总成绩从高到低输出ñ条记录,每条记录占一行。总成绩相同时按语文成绩从高到低输出,语文成绩相同时按数学成绩从高到低输出。 (没有两个人的成绩完全一样)


33.png

#include<bits/stdc++.h>
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
//sort 函数排序
struct stu
{
    string  zz;//姓名
    int z,a,b,c;//总分,语文,数学,英语
}I[105];
bool cmp(stu a,stu b)
{
    if(a.z==b.z)//按照总分大的排序,总分一样的话,按照语文从大到小排序,,,,,,
    {
        if(a.a==b.a)
        {
            if(a.b==b.b)
                return a.c>b.c;
            return a.b>b.b;
        }
        return a.a>b.a;
    }
    return a.z>b.z;
}
int main()
{
    int n;
    cin>>n;
    for(int i=0;i<n;i++)
        cin>>I[i].zz>>I[i].z>>I[i].a>>I[i].b>>I[i].c;
    sort(I,I+n,cmp);
    for(int i=0;i<n;i++)
        cout<<I[i].zz<<' '<<I[i].z<<' '<<I[i].a<<' '<<I[i].b<<' '<<I[i].c<<endl;
    return 0;
}

vector

字符串有些是对称的,有些不是对称的,请将那些对称的字符串安从小到大的顺序输出,字符串先以长度论大小,如果长度相等,再以ASCII码值为排序标准;


34.png

//输入n个字符串,然后按照以下规则输出  对称  的字符串
//规则:优先输出长度小的,如果长度相等,输出字典序小的
#include<bits/stdc++.h>
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
//排序!!!!!!!!!!!!
bool cmp(string a,string b)
{
    return a.length()!=b.length()? a.length()<b.length():a<b;
}
int main()
{
    int n;
    cin>>n;
    string s;//输入的
    string temp;//交换的
    vector<string>v;//用动态数组存储将要输出的对称的字符串
    for(int i=0;i<n;i++)
    {
        cin>>s;
        temp=s;//string直接赋值
        reverse(temp.begin(),temp.end());//翻转
        if(s==temp)
            v.push_back(s);
    }
    sort(v.begin(),v.end(),cmp);//对vector进行sort排序
    for(int i=0;i<v.size();i++)
        cout<<v[i]<<endl;//直接输出
    return 0;
}

Huffman树

/*
//哈夫曼树
//找到{pi}中最小的两个数,设为pa和pb,将pa和pb从{pi}中删除掉,
//然后将它们的和加入到{pi}中。这个过程的费用记为pa  +  pb。 
//2.  重复步骤1,直到{pi}中只剩下一个数
#include<bits/stdc++.h>
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
bool cmp(int a,int b)//vector的排序
{
    return a>b;
}
int main()
{
    int n;
    cin>>n;
    vector<int>q;
    int a;
    int ans=0;
    for(int i=1;i<=n;i++)
    {
        cin>>a;
        q.push_back(a);
    }
    while(q.size()>1)
    {
        //方法一
        sort(q.begin(),q.end()); //默认从小到大排序也行
        int i=q[0];//访问的话,就直接数组访问就好啦
        q.erase(q.begin());
        int j=q[0];
        q.erase(q.begin());
        q.push_back(i+j);
        //方法二
        //学姐讲的方法
        //从大到小排序
        sort(q.begin(),q.end(),cmp);
        int t=q[q.size()-1]+q[q.size()-2];
        q.pop_back();
        q.pop_back();
        q.push_back(t);
        ans += t;
    }
    cout<<ans;
    return 0;
}
*/

map

//输入几个人名,输出一共有多少个人(不重复)
//map自身去重
#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    cin>>n;
    string s;
    map<string,int>a;//定义map!!!!!!!!!!!!!!!!!!
    while(n--)
    {
        cin>>s;
        a[s]=1;//直接赋值进去
    }
    cout<<a.size();
    return 0;
}
//输入几个人名,输出人名和此人名出现的次数
#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    cin>>n;
    string s;
    map<string,int>a;
    set<int>::iterator it;//迭代器
    while(n--)
    {
        cin>>s;
        if(a.count(s))//如果a中已经有这个人名了,数值就+1
            a[s]++;
        else      //如果没有这个人,就把这个人加到set中去,然后赋值1
            a[s]=1;
    }
    //iterator
    //输出!!!!!!!!!!!!
    for(auto  it=a.begin();it!=a.end();it++)
        cout<<it->first<<' '<<it->second<<endl;
    return 0;
}
相关文章
|
3月前
|
存储 算法 C++
【C++】STL的基本用法
【C++】STL的基本用法
39 0
|
2月前
|
存储 算法 C++
C++ STL库的介绍和使用(下)
C++ STL库的介绍和使用
27 1
|
2月前
|
存储 算法 前端开发
C++ STL库的介绍和使用(上)
C++ STL库的介绍和使用
52 0
|
2月前
|
算法 安全 Linux
【C++】—— STL简介(了解)
【C++】—— STL简介(了解)
|
3月前
|
算法 安全 Linux
【c++】STL简介(了解)
【c++】STL简介(了解)
【c++】STL简介(了解)
|
3月前
|
机器学习/深度学习 算法 C++
C++模板与STL【STL概述】
C++模板与STL【STL概述】
|
10月前
|
C++ 容器
STL库之集合基本使用方法
STL库之集合基本使用方法
|
5月前
|
算法 Linux C语言
(C++)STL简介
(C++)STL简介
27 0
|
27天前
|
算法 Java Linux
STL简介
STL简介
30 0
|
10月前
|
存储 算法 C语言
STL库之动态数组vector基本使用方法
STL库之动态数组vector基本使用方法