通过区间问题,更加深刻的了解了pair的用法,用sort函数对pair进行排序的时候,默认的是根据pair的first的进行升序,也可以自定义比较函数,如下:
1 #include<iostream> 2 #include<algorithm> 3 using namespace std; 4 int cmp(const pair<int,int>&a, const pair<int,int>&b) 5 { 6 return a.second > b.second; 7 } 8 int main() 9 { 10 int n = 5, s[] = { 10,2,4,6,8 }, t[] = { 3,5,7,9,10 }; 11 pair <int, int> itv[100]; 12 for (int i = 0; i < n; i++) 13 { 14 itv[i].first = t[i]; 15 itv[i].second = s[i]; 16 } 17 sort(itv, itv + n,cmp); 18 for (int i = 0; i < 5; i++) 19 cout << itv[i].first << " " << itv[i].second << endl; 20 return 0; 21 }
对于区间问题的解法,果然大佬的方法比我们的简单和代码质量高了很多
1 #include<iostream> 2 #include<algorithm> 3 using namespace std; 4 int main() 5 { 6 int n = 5, s[] = { 10,2,4,6,8 }, t[] = { 3,5,7,9,10 }; 7 pair <int, int> itv[100]; 8 for (int i = 0; i < n; i++) 9 { 10 itv[i].first = t[i]; 11 itv[i].second = s[i]; 12 } 13 sort(itv, itv + n); 14 int ans = 0, k = 0;//k为最后所选工作结束时间 15 for (int i = 0; i < n; i++) 16 { 17 if (k < itv[i].second) 18 { 19 ans++; 20 k = itv[i].first; 21 } 22 } 23 cout << ans << endl; 24 return 0; 25 }
//感觉最好解决这个问题的做法就是使用了pair,不像我解决时用得时queue再加一个结构体,那样的话还要自定义比较函数