借鉴jinzun2000大佬的思路
我做出了一些注释和优化
重点
1动态数组存储class Apple类
2map匹配篮子号和苹果id
果园采摘了n个苹果,分别放在若干个篮筐中。现给出n个苹果所在篮筐的情况,请找出每个篮筐中重量最重的苹果。定义一个苹果类Apple,有编号(id)、重量(weight)、直径(diameter)成员变量。
输入格式:
首先输入一个整型数n(1<=n<=999999),表示n个苹果。
紧跟着n行输入,每一行格式为:篮筐号,苹果编号(id),重量(weight),直径(diameter)。
篮筐号为整数,取值区间为[1,999999],id为字符串,weight、diameter为正整数。
输出格式:
按篮筐号从小到大排序,输出每个篮筐中重量最重的苹果信息。题目保证每个篮筐中只有一个重量最重的苹果。
输入样例
7 1 N000001 175 77 2 N000002 180 83 2 N000003 160 66 1 N000004 160 63 1 N000005 165 68 4 N000006 183 85 2 N000007 170 74输出样例
1 N000001 175 77 2 N000002 180 83 4 N000006 183 85#include <bits/stdc++.h> using namespace std; class Apple { public: Apple(string id, int w, int d) { //创建赋值 a_id = id; weight = w; diameter = d; } void print_fun();//输出 //定义 string a_id; int weight, diameter; }; int re_Apple(int n, string s, vector<Apple> *A) { // 通过苹果id,找苹果在vector中的位置 for (int i = 0; i < n; i++) {//遍历vector if (s == ((*A)[i].a_id)) { return i; } } return -1;//没找到 } void Apple::print_fun() { cout << this->a_id << " "; cout << this->weight << " "; cout << this->diameter << endl; } int main() { int N; cin >> N; vector <Apple> v; map<int, string> Map;//[框子号,苹果id] for (int i = 1; i <= N; i++) { string id; int w, d, basket; cin >> basket >> id >> w >> d; v.push_back(Apple(id, w, d)); if (Map.find(basket) == Map.end()) {//没找到 Map[basket] = id;//若basket不存在,则创建 } else { //baseket 已存在 if (w > v[re_Apple(v.size(), Map[basket], &v)].weight)//当前苹果和篮子中现存最大苹果相比较 Map[basket] = id; } } for (auto &e : Map) { cout << e.first << " "; v[re_Apple(N, e.second, &v)].print_fun(); } return 0; }看过一个vector<int> basket (999999+1)的代码
int re_Apple(int n, string s, vector<Apple> *A) { // 通过苹果id,找苹果在vector中的位置
for (int i = 0; i < n; i++) {//遍历vector
if (s == ((*A)[i].a_id)) {
return i;
}
}
return -1;//没找到
}
这一段功能函数优化了很多,负责通过苹果的id Map[basket](e.second)来找寻这个苹果
在vector中存储的位置,省空间省力
if (w > v[re_Apple(v.size(),Map[basket], &v)].weight)//当前苹果和篮子中现存最大苹果相比较
这个思路是不是让人眼前一亮呢
psmap.find()找寻key值 (键值升序哦
若想找value
则1for (auto it = myMap.begin(); it != myMap.end(); ++it) {
if (it->second == target_value) {
cout << "找到value='" << target_value << "',对应的key=" << it->first << endl;
break;
}
}
2auto it = find_if(起始迭代器, 结束迭代器, 条件函数);
#include <algorithm>
bool isApple(const pair<int, string>& element) {
return element.second == "apple";
}
// 使用
auto it = find_if(myMap.begin(), myMap.end(), isApple);