技巧-自定义类型-插入set容器

华为0904-第一题

按元素频率高低进行输出,如果频率相同,则按元素的额值大小进行排序

自定义item类型

1
2
3
4
5
struct item {
int num;
int count;
item(int num, int count) : num(num), count(count) {}
};

方法一 : set

1
2
3
4
5
6
7
8
9
10
// 这里
auto dcompare = [](const item& l, const item& r) -> bool {
bool ret = false;
if (l.count > r.count) ret = true;
else if (l.count == r.count) ret = l.num > r.num;
return ret;
};
// 注意一定要将dcompare函数类的对象显示传递给st的构造函数
set<item, decltype(dcompare)>st(dcompare);
// 另外要注意compare函数最好为const类型的

方法二 :vector

其实这里直接使用vector容器也可以,所有元素完全插入后,直接来一个sort就可以

1
2
3
4
5
6
7
8
9
10
11
12
vector<item> st(mp.size(), item(0, 0));
int i = 0;
for (auto it : mp)
{
st[i++] = item(it.first, it.second);
}
sort(st.begin(), st.end(), [](const item& l, const item& r) -> bool {
bool ret = false;
if (l.count > r.count) ret = true;
else if (l.count == r.count) ret = l.num > r.num;
return ret;
});

技巧-自定义类型-插入set容器
http://example.com/2024/09/04/算法刷题/技巧-自定义类型-插入容器并排序/
作者
Cyokeo
发布于
2024年9月4日
许可协议