作者softwind (software everywhere)
看板C_and_CPP
標題[問題] C++/STL/vector< pair<> >配合sort
時間Thu Jul 14 00:27:30 2011
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
Windows, VC 2008 免費版
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
<vector>, <utility>, <algorithm>, <functional>
問題(Question):
sort 可以針對 vector裡面的 element排序~
sort( v.begin(), v.end(), CMP);
我想請問 如果我vector裡面的element 是 pair建出來的 那我該如何比較?
(用first 比 和用 second 比)
ex:
vector< pair<int, int> > point2D; //假設 pair<>::firsst是x, second是y好了
那麼我要針對 x or y排序 我必須另外寫 compare function
bool cmp_x( pair<int,int> &A, pair<int,int> &B){
return A.first < B.first;
}
bool cmp_y( pair<int,int> &A, pair<int,int> &B){
return A.second < B.second;
}
請問這種情形下 我想用 functional裡面的東西 兜出同樣的效果 我該如何寫???
我最基本的問題是 pair 沒有辦法指定把 哪個member抓出來比...
sort( point2D.begin(), point2D.end(), less<?,?>(?) );
?都不會填
感謝~
--
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.166.120.69
→ PkmX:為什麼不自己定義一個functor比就好了呢@@ 07/14 00:34
→ firejox:pair是先比first 如果first相等才比second 07/14 00:47
→ firejox:你可能用less只能排序x而已 07/14 00:51
→ softwind:因為要兩行以上阿~~~ 如果能能用 functor就兜出來 最佳 07/14 01:36
→ softwind:問題就是 用less 怎樣寫才能排序依據 y? 07/14 01:36
推 avhacker:就做個functor繼承binary_function,吃 pair<int,int> 07/14 01:39
→ loveme00835:個人覺得boost的tuple + get復用性比較高, 儘量用VC10 07/14 12:23
→ loveme00835:吧, 可以簡短很多, 且lambda是class不是function, 速 07/14 12:24
→ loveme00835:度也快 07/14 12:24
→ loveme00835:不過因為get很難搞, 所以還是要寫一個類別模板, 但是 07/14 13:44
→ loveme00835:可萬用, 我不清楚VS2008有沒有TR1, 不然這些標準就有 07/14 13:45
推 purpose:裝了2008 SP1有部份的TR1,不完整 07/14 15:42
推 loveme00835:感謝樓上~ 07/14 20:45