作者LPH66 ((short)(-15074))
看板Programming
标题Re: overload operator < 来排序
时间Fri Apr 3 12:19:53 2009
※ 引述《adrianshum (Alien)》之铭言:
: ※ 引述《sorryChen (陈扬和)》之铭言:
: : 感谢学长详细的解答
: : 但我其实想用现成的sort..
: : 现成的sort好像需要pass-in comparison function. 而且我希望这个comparison
: : function 可以轻易抽换 且是根据外部的资讯轻易抽换..
: : 比如说我有个array存有每个人的名子,
: : 然後一个object存有每个人的数学成绩 另一个object有国文成绩 ....etc
: : 我想要有个comparison的function pointer
: : 指到数学成绩这个object的member function 比较两个人的数学成绩 for example
: : 然後也可以指到国文成绩这个object..如果要排国文的话...
: : 我不知道要怎麽写才能利用外部的资料+comparison function
: : 和现成的sort..而我觉得这一定有人写过相同的问题...
: : 如果用一个interface 要怎麽用呢..
: 我没记错的话, 现有 Std lib 里有不少都已
: 经有提供你所说的 'comparison function',
: 用来让没有提供 < operator 的东西能依一个
: 外来传入的 less function 来作比较 (及 sort)
: 可以去看看 map 怎样做法. 通常很多情况下都
: 不是真的喂 function pointer, 而是喂 functor
struct object //其实用 class 也不会怎样 自己控管好 accessibility 就好
{
int x,y,z;
};
bool compare1(const object &a, const object &b)
{
return a.x>b.x;
}
bool compare2(const object &a, const object &b)
{
return a.y<b.y;
}
class compare3 //这是一个functor!
{
public:
bool operator () (const object &a, const object &b)
{
if(a.z==b.z)
{
if(a.y==b.y)
{
return a.x<b.x;
}
else
{
return a.y<b.y;
}
}
else
{
return a.z<b.z;
}
}
};
.....
object data[100];
....
sort(data,data+100,compare1); //把data对x由大排到小
sort(data,data+100,compare2); //把data对y由小排到大
sort(data,data+100,compare3()); //先对z, 一样再对y, 再一样对x 都是由小排到大
--
◢ ˊ_▂▃▄▂_ˋ. ◣ ▅▅ ▅▅ ι●╮ █
▄▄▄▄▄
▍
./◤_▂▃▄▂_◥ \'▊ HARUHI █████ <■┘ ▄▄▄▄▄▄▄
▎
⊿ ◤◤◥█◥◥█Δ ISM By-gamejye ¢|\ ▌▌▌▌▌▄▌▌
▏
ζ(▏●‵◥′●▊)Ψ ▏ █
⊿Δ ▄▄▄ ▄▄▄▄
█/|▊ 〃 、 〃▋ |\ ▎ ハルヒ主义 █
▄▄▄█▄▄
◥◥|◣ ‵′ ◢/'◢◢
S.O.S 世界を大いに盛り上げるための凉宫ハルヒの団
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.30.84
1F:推 sorryChen:太感谢了 这些问题困扰我非常久 128.125.87.33 04/03 14:30
2F:推 sorryChen:可是比较困扰我的是 如何用外部资讯排 128.125.87.33 04/03 14:38
3F:→ sorryChen:不知道怎麽样把指到外部资讯传进去 128.125.87.33 04/03 14:40
4F:→ sorryChen:才想说有可能设function pointer 完成 128.125.87.33 04/03 14:41
5F:→ adrianshum:你要传什麽? functor 有额外资料就行了 202.155.236.82 04/03 15:14
6F:推 march20:把你的 "外部资讯" 放在 object 的定义里 128.54.20.28 04/04 01:59
7F:推 march20:这样不就行了? 还是你想做一个 comparator 128.54.20.28 04/04 02:00
8F:推 march20:可以比较全部的东西 ? 128.54.20.28 04/04 02:00
9F:推 sorryChen:好像试成功了 非常感谢前辈的指导 128.125.87.33 04/04 04:18