但是没有去掉重复的元素
时间: 2024-03-07 17:50:49 浏览: 43
对于去重,我们需要使用unique函数,并且需要指定一个比较函数来判断两个元素是否相等。在这里,我们需要判断成绩相同的科目是否重复,如果重复则只保留一个。以下是修改后的代码:
```
bool compare_scores(const pair<string, string>& a, const pair<string, string>& b) {
double score_a = stod(a.second, nullptr);
double score_b = stod(b.second, nullptr);
if (isnan(score_a)) {
score_a = 0;
}
if (isnan(score_b)) {
score_b = 0;
}
return score_a > score_b;
}
bool compare_courses(const pair<string, string>& a, const pair<string, string>& b) {
return a.first == b.first && a.second == b.second;
}
void management::print_scores_sorted(const vector<course>& courses_for_student) {
vector<pair<string, string>> scores_vec;
for (const auto& c : courses_for_student) {
scores_vec.push_back(make_pair(c.m_coursename, c.m_score));
}
sort(scores_vec.begin(), scores_vec.end(), compare_scores);
scores_vec.erase(unique(scores_vec.begin(), scores_vec.end(), compare_courses), scores_vec.end());
for (const auto& s : scores_vec) {
cout << s.first << "\t" << s.second << endl;
}
}
```
在上面的代码中,我们定义了一个新的比较函数`compare_courses`,用于判断成绩相同的科目是否重复。然后在调用`unique`函数时,我们将这个比较函数作为第三个参数传递进去,以此来去除重复的元素。
阅读全文