STL 链表: List
初始化
1 2
| #include<list> list<int> linklist;
|
在头部或尾部添加一个元素:
1 2 3
| int head = 0; linklist.push_front(head); linklist.push_back(head);
|
遍历链表,并在值为x的节点后面,插入值为y的节点:
1 2 3 4 5 6
| for(auto it=linklist.begin(); it!=linklist.end(); it++){ if(*it==x){ linklist.insert(++it, y); break; } }
|
删除节点:
1 2 3 4 5
| iterator erase( iterator pos ); iterator erase( iterator start, iterator end );
void remove( const TYPE &val );
|
结构体排序
题目大意:对录入的学生的分数进行升序或降序排列。原题链接
输入的第一行表示学生的人数n;第二行表示按升序(1)还是降序(0)来排列;接下来的n行是学生的名字和分数。如果有学生分数相同,则按照录入的顺序来输出。
1 2 3 4 5 6 7 8 9 10
| 输入: 3 0 fang 90 yang 50 ning 70 输出: fang 90 ning 70 yang 50
|
关键是cmp函数要掌握!
话不多说,直接看代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| #include<iostream> #include<string> #include<algorithm> using namespace std;
struct Node{ string name; int score; int id; }; Node node[201];
bool cmp1(Node x, Node y){ if(x.score == y.score) return x.id < y.id; return x.score > y.score; }
bool cmp2(Node x, Node y){ if(x.score == y.score) return x.id < y.id; return x.score < y.score; } int main(){ int n; while(cin>>n){ int order; cin>>order; for(int i=0;i<n;i++){ cin>>node[i].name>>node[i].score; node[i].id = i; } if(order == 0) sort(node, node+n, cmp1); else sort(node, node+n, cmp2); for(int i=0;i<n;i++) cout<<node[i].name<<' '<<node[i].score<<endl; } return 0; }
|
利用unordered_map计数,并按输入顺序输出
原题链接
题目大意:统计每个候选人的得票数。
输入有4行。第1行表示候选人数n;第2行表示n个候选人的名字;第3行表示投票人数m;第4行表示m个投票结果,其中有些是废票,需要单独统计。最后按照录入顺序,输出每个候选人的得票,以及废票的数量。
1 2 3 4 5 6 7 8 9 10 11
| 输入: 4 A B C D 8 A D E CF A GG A B 输出: A : 3 B : 1 C : 0 D : 1 Invalid : 3
|
分析
一一映射的题目,肯定用map啊:
不要求排序,所以用unordered_map
,但是unordered_map
不保证遍历顺序就是插入顺序,所以额外用vector记录一下插入的顺序。
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| #include<iostream> #include<unordered_map> #include<string> #include<cstring> #include<vector> using namespace std;
int main(){ int n; while(cin>>n){ unordered_map<string, int> candidates; vector<string> vec; string s; for(int i=0;i<n;i++){ cin>>s; candidates[s] = 0; vec.push_back(s); } int m; int invalid = 0; cin>>m; for(int i=0;i<m;i++){ cin>>s; if(candidates.find(s) != candidates.end()) candidates[s] ++; else invalid ++; } for(int i=0;i<n;i++) cout<<vec[i]<<" : "<<candidates[vec[i]]<<endl; cout<<"Invalid : "<<invalid<<endl; } return 0; }
|