Re: [語法] STL sort 在一個 Class 裡面含很多priv …
看板C_and_CPP (C/C++)作者minazukimaya (水無月真夜)時間16年前 (2009/10/05 11:41)推噓3(3推 0噓 29→)留言32則, 3人參與討論串2/6 (看更多)
※ 引述《BlackMatrix (BlackMatrix)》之銘言:
: 現在我完全改進我的Functor, 變成
:
: template <class C>
: class LessThanByLat
: {
: public:
: bool operator() (C lhs, C rhs)
: {
: return (lhs.getLat()<rhs.getLat());
: }
: };
:
: 跟
:
: sort (GNF_vector.begin(), GNF_vector.end(), LessThanByLat<bool>());
:
: 我想要我的vector裡面以LAT這個數字以大到小排列, 目前我這樣寫, 看看該怎麼辦
: 成功
:
: 如果有想法的拜託請給點提示~~~~ (雖然我知道我上面那串Code寫錯了)
: ※ 編輯: BlackMatrix 來自: 71.183.68.195 (10/05 04:55)
:
: 我解決這個問題了
:
: class LessThanByLat
: {
: public:
: bool operator() (GNF& lhs,GNF& rhs)
: {
: return (lhs.getLat()<rhs.getLat());
: }
: };
:
: sort (GNF_vector.begin(), GNF_vector.end(), LessThanByLat());
:
: 謝謝各位的幫助
教授不是要你用template寫嗎@@
你這樣寫的話 如果GNF這個class有十個attribute可供排序
你就要寫十個functor..
所以教授的意思應該是要你用template產生functor
假設
class GNF {
int attr1;
double attr2;
char attr3;
public:
}
你要做的事有
1. 在GNF裡面加個enum GNF::SortBy,來指出哪些變數可以用來Sort
2. 在GNF的public介面上加一個template member function getAttr<>()
用以提取private,當然你得為每個要提取的變數寫一個特化版本
3. 在GNF外面寫一個template functor 為各種attribute產生functor
class GNF {
int attr1;
double attr2;
char attr3;
public:
enum SortBy { ATTR1, ATTR2, ATTR3};
template<SortBy T>
void getAttr() {}; // 主要模板 但是是空的
template<>
int getAttr<ATTR1>() { return attr1; }; // 提供特化版本,下略
....
....
}
剩下的template functor的問題就交給你自己想了
如果一切順利
最後的用法應該像這樣
std::sort(GNF_vector.begin(), GNF_vector.end(), LessThanBy<ATTR1> );
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.32.15.163
→
10/05 12:04, , 1F
10/05 12:04, 1F
→
10/05 12:05, , 2F
10/05 12:05, 2F
→
10/05 12:39, , 3F
10/05 12:39, 3F
→
10/05 12:39, , 4F
10/05 12:39, 4F
→
10/05 12:40, , 5F
10/05 12:40, 5F
→
10/05 12:41, , 6F
10/05 12:41, 6F
→
10/05 16:10, , 7F
10/05 16:10, 7F
→
10/05 16:11, , 8F
10/05 16:11, 8F
→
10/05 16:27, , 9F
10/05 16:27, 9F
→
10/05 16:28, , 10F
10/05 16:28, 10F
→
10/05 16:28, , 11F
10/05 16:28, 11F
推
10/05 16:30, , 12F
10/05 16:30, 12F
→
10/05 16:31, , 13F
10/05 16:31, 13F
→
10/05 16:31, , 14F
10/05 16:31, 14F
推
10/05 16:36, , 15F
10/05 16:36, 15F
→
10/05 16:37, , 16F
10/05 16:37, 16F
→
10/05 16:38, , 17F
10/05 16:38, 17F
→
10/05 16:41, , 18F
10/05 16:41, 18F
→
10/05 16:41, , 19F
10/05 16:41, 19F
→
10/05 16:41, , 20F
10/05 16:41, 20F
推
10/05 16:42, , 21F
10/05 16:42, 21F
→
10/05 16:42, , 22F
10/05 16:42, 22F
→
10/05 16:50, , 23F
10/05 16:50, 23F
→
10/05 16:50, , 24F
10/05 16:50, 24F
→
10/05 16:52, , 25F
10/05 16:52, 25F
→
10/05 16:52, , 26F
10/05 16:52, 26F
→
10/05 16:53, , 27F
10/05 16:53, 27F
→
10/05 16:53, , 28F
10/05 16:53, 28F
→
10/05 16:55, , 29F
10/05 16:55, 29F
→
10/05 16:55, , 30F
10/05 16:55, 30F
→
10/05 16:56, , 31F
10/05 16:56, 31F
→
10/05 16:56, , 32F
10/05 16:56, 32F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 6 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章