## L2-039 清点代码库

题目链接：https://pintia.cn/problem-sets/994805046380707840/exam/problems/type/7?problemSetProblemId=1386335159927652362&page=1

**解题思路：这道题是需要查重，一开始就能想到要用哈希表或者有序表来写，但是哈希表内置的key没有vector这种结构，但是有序表map可以，有序表是根据key的大小顺序来存储的，而vector本身是可以比较大小的，所以可以用map
同时题目有要求我们需要按照给定顺序输出，所以我们可以自定义一个结构体，通过sort函数进行排序**

具体代码如下：
```cpp
#include<bits/stdc++.h>
using namespace std;

//这里要注意一点，就是map是有序表，是依靠比较大小来的，而vector可以比较大小，所以可以做它的key
//但是哈希表需要哈希函数的映射，但是数组不行，这点需要注意
//转换成vector来比较排序比较方便，这里就比较复杂了，涉及到结构体的定义
struct node{
    vector<int> seq;
    int count;
};
bool cmp(node& a,node& b){
    if(a.count==b.count){
        return a.seq<b.seq;//vector可以直接比较
    }
    return a.count>b.count;
}
int main(){
    int N,M;
    cin>>N>>M;
    map<vector<int>,int> map;//就是map是有序表，vector是可以比大小的，所以可以这么写
    for(int i=0;i<N;i++){
        vector<int> temp(M);
        for(int j=0;j<M;j++){
            cin>>temp[j];//这里是用变量i还是j要分清
        }
        map[temp]++;
    }
    //这里还需要转换成vector来排序
    vector<node> res;
    //这道题的另一个难点就是排序了，用结构体排序
    for(auto & a:map){
        res.push_back({a.first,a.second});//记得用花括号
    }
    sort(res.begin(),res.end(),cmp);
    cout<<res.size()<<endl;
    for(int i=0;i<res.size();i++){
        cout<<res[i].count;
        for(auto &a:res[i].seq){
            cout<<" "<<a;
        }
        cout<<endl;
    }
    return 0;
}
