STL中提供了高效的排序算法,vector中是sort函数。当vector的元素数据类型是基本数据类型(int,double)时自然可以调用sort进行排序。但是当vector的元素是我们自定义的类或结构类型呢?如定义class Student{ public string name;public double score;}定义vector<Student> stuVector;想对stuVector按照score成绩进行排序该如何做呢?无法利用STL提供的算法,必须自己手动实现排序吗?
在C#中为Student实现IEnumerable借口就能调用类库算法了,C++中有这样的功能么?
说的有点啰嗦,但是相信大家还是能够理解的,在此先谢过了~~~
IEnumerable 以支持 C# 语言的 foreach 语义(在 C++ 中为 for each)。允许枚举数的 COM 类也实现此接口。
参考:
http://www.brianensink.com/blog/post/Implementing-IEnumerable3cT3e-in-C2b2bCLI.aspx
看这篇,好像只要你的自定义结构实现大于,等于,小于操作符重载就可以了。
http://topic.csdn.net/t/20050907/22/4256119.html
namespace std{
namespace rel_ops{
//这里面定义了 !=, > , <= >= 四个比较操作符。他们都是利用操作符 == 和 < 完成的。 定义于 <utility>
//类似下面这样的四个模板函数
template < class T>
inline bool operator != (const T& x, const T& y){
return !(x == y);
}
}
}
你对你自己的类 重载下 == 和 < ,然后 #include<utility>, 在使用的地方 using namespace std::rel_ops 就可以了。
比如:
class A
{
// 为 A 定义自己的比较接口
bool operator == (const A& x)const;
bool operator < (const A& x)const;
}
#include<utility>
void foo()
{
// 引入模板函数
using namespace std::rel_ops;
std::vector<A> stdVecA;
stdVecA.push_back(A());
//...........
// 这下面就可以直接使用 std 的排序算法了
stdVecA.Sort();
}