#include <bits/stdc++.h>
using namespace std;
struct cmp {
bool operator() (int a, int b) {
return a > b;
}
};
int main() {
// 1、初始化
multiset<int> s1;
multiset<int, cmp> s2; // 自定义排序
// 2、添加元素
for (int i = 0; i < 5; i++) {
s1.insert(i);
s2.insert(i);
}
// 3、输出第一个元素
cout << *s1.begin() << endl;
// 4、输出最后一个元素
cout << *s1.rbegin() << endl;
// 5、遍历
multiset<int>::iterator it;
for (it = s1.begin(); it != s1.end(); it++) {
cout << *it << endl;
}
// 6、是否存在其元素
cout << ((s1.find(2) == s1.end()) ? "NO" : "YES") << endl;
// 7、二分到左边
cout << *s1.lower_bound(6) << endl;
// 8、二分到右边
cout << *s1.upper_bound(3) << endl;
// 9、计数
s1.insert(2);
s1.insert(2);
cout << s1.count(2) << endl;
// 10、删除一个2
s1.erase(s1.find(2));
cout << s1.count(2) << endl;
// 11、删除所有2
s1.erase(2);
cout << s1.count(2) << endl;
// 12、清空
s1.clear();
// 13、判空
cout << s1.empty() << endl;
return 0;
}
输出:
0
4
0
1
2
3
4
YES
5
4
3
2
0
1
结构体排序
// https://www.acwing.com/problem/content/description/3379/
#include <bits/stdc++.h>
using namespace std;
struct student {
int id, score;
bool operator < (const student& a) const {
if (score != a.score) return score < a.score;
return id < a.id;
}
};
int main() {
int n;
cin >> n;
multiset<student> s;
for (int i = 0; i < n; i++) {
int id, score;
cin >> id >> score;
s.insert({id, score});
}
for (int i = 0; i < n; i++) {
cout << s.begin()->id << ' ' << s.begin()->score << endl;
s.erase(s.begin());
}
return 0;
}