首页 新闻 会员 周边

如何利用C++/STL vector的sort算法对元素是自定义类型进行排序?

0
悬赏园豆:100 [已关闭问题]

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++中有这样的功能么?

说的有点啰嗦,但是相信大家还是能够理解的,在此先谢过了~~~

frcsun的主页 frcsun | 初学一级 | 园豆:100
提问于:2010-06-20 19:56
< >
分享
其他回答(2)
0

IEnumerable 以支持 C# 语言的 foreach 语义(在 C++ 中为 for each)。允许枚举数的 COM 类也实现此接口。

参考:

http://www.brianensink.com/blog/post/Implementing-IEnumerable3cT3e-in-C2b2bCLI.aspx

http://www.codeproject.com/KB/mcpp/mcppcoll.aspx

winzheng | 园豆:8797 (大侠五级) | 2010-06-20 22:19
0

看这篇,好像只要你的自定义结构实现大于,等于,小于操作符重载就可以了。

http://topic.csdn.net/t/20050907/22/4256119.html

eaglet | 园豆:17139 (专家六级) | 2010-06-21 07:22
1

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();

}

JefferyZhou | 园豆:205 (菜鸟二级) | 2010-07-03 16:27
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册