您当前的位置: 首页 > 

不牌不改

暂无认证

  • 0浏览

    0关注

    422博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

L2-039 清点代码库 (25 分)

不牌不改 发布时间:2022-03-23 11:34:35 ,浏览量:0

题目

题目链接

题解

考查STL。

set 容器排序详讲

set内部本身自带排序函数,也就是说插入set后通过迭代器或者auto输出的结果都是升序排列的;如果想要改变排序方式,可以自己定义一个cmp结构体,重载set?()操作符,比如:

#define PSI pair
struct cmp {
	bool operator() (const PSI & a, const PSI & b) const {
		if (a.second != b.second) return a.second > b.second;
		return a.first v2[i]说明v1>v2。

更新于2022.4.22

发现其实根本不用这么麻烦,只要知道vector是可以自己比较大小是就行了。

用map统计出每种vector的数量; 用个结构体保存,索引就是正常编号,数据项为vector和vector的个数; 再重新遍历输入的每一行,如果遍历过了这个vector,那么就continue,没遍历过就相当于遇到了一个独一无二的vector,结构体编号加一,vector赋值为遍历到的,个数赋值为上面map统计的数量; 遍历完成,sort,重写cmp; 输出。

代码
#include
#define VI vector,int
#define PVI pair
using namespace std;
int n, m, x;
vector  v;

struct cmp { // !!! 
	bool operator() (const PVI & a, const PVI & b)  {
		if (a.second != b.second) return a.second > b.second;
		return a.first > n >> m;
	for (int i = 1;i  x, v.push_back (x);
		Map[v] ++;
	}	
	
	for (auto item : Map) {
		v = item.first;
		int cnt = item.second;
		s.insert ({v, cnt});
	}
	
	cout             
关注
打赏
1662186765
查看更多评论
0.0817s