`
zhaoqj518
  • 浏览: 32860 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

vector 包含 结构体排序

阅读更多

 C++中当 vector 中的数据类型为基本类型时我们调用std::sort函数很容易实现 vector中数据成员的升序和降序排序,然而当vector中的数据类型为自定义结构体类型时,我们该怎样实现升序与降序排列呢?有两种方法,下面的例子能很好的说明:

  方法1:

  我们直接来看代码吧,比较简单,容易理解:

   #include "stdafx.h"

   #include   <vector>  
   #include   <algorithm>
   #include <functional>
   
  using   namespace   std;  

  struct AssessTypeInfo
 {
    unsigned int m_uiType;   //类型ID
    char   m_szName[64];  //类型名称
    unsigned int m_uiTotal;   //总分数


   bool   operator <  (const   AssessTypeInfo&   rhs   )  const   //升序排序时必须写的函数
  {  
     return   m_uiType   <   rhs.m_uiType;
   }

    bool   operator >  (const   AssessTypeInfo&   rhs   )  const   //降序排序时必须写的函数
   {  
       return   m_uiType   >   rhs.m_uiType;
    }

}

int   main()  
  {  
   vector<AssessTypeInfo >   ctn   ;  
  
   AssessTypeInfo a1;
   a1.m_uiType=1;

   AssessTypeInfo  a2;
   a2.m_uiType=2;


   AssessTypeInfo  a3;
   a3.m_uiType=3;


   ctn.push_back(a1);
   ctn.push_back(a2);
   ctn.push_back(a3);

   //升序排序
   sort(ctn.begin(), ctn.end(),less<AssessTypeInfo>())   ;   //或者sort(ctn.begin(), ctn.end())  默认情况为升序
  

   for   ( int  i=0;   i<3;   i++   )  
    printf("%d\n",ctn[i].m_uiType);  


  //降序排序

  sort(ctn.begin(), ctn.end(),greater<AssessTypeInfo>())   ;  


   for   ( int  i=0;   i<3;   i++   )  
    printf("%d\n",ctn[i].m_uiType);  
  
  
   return   0  ;  
  }

 以上方法就可以实现升序排序,输出结果为 1  2   3 

 降序排序结果3  2  1。

方法2 :  不修改结构体或类的定义部分,我们用函数对象来实现:

  #include "stdafx.h"

  #include   <vector>  
  #include   <algorithm>
  #include <functional>
   
  using   namespace   std;  

 struct AssessTypeInfo
{
 unsigned int m_uiType;   //类型ID
  char   m_szName[64];  //类型名称
 unsigned int m_uiTotal;   //总分数

};


  bool   lessmark(const   AssessTypeInfo&   s1,const   AssessTypeInfo&   s2)  
  {  
      return   s1.m_uiType   <   s2.m_uiType;  
  }

  bool   greatermark(const   AssessTypeInfo&   s1,const   AssessTypeInfo&   s2)  
  {  
      return   s1.m_uiType   >   s2.m_uiType;  
  }

int   main()  
  {  
   vector<AssessTypeInfo >   ctn   ;  
  
   AssessTypeInfo a1;
   a1.m_uiType=1;

   AssessTypeInfo  a2;
   a2.m_uiType=2;


   AssessTypeInfo  a3;
   a3.m_uiType=3;


   ctn.push_back(a1);
   ctn.push_back(a2);
   ctn.push_back(a3);


   sort(ctn.begin(), ctn.end(),lessmark)   ;   //升序排序
  
  
   for   ( int  i=0;   i<3;   i++   )  
    printf("%d\n",ctn[i].m_uiType);  
  

   sort(ctn.begin(), ctn.end(),greatermark)   ;   //降序排序

  
   return   0  ;  
  }

 

 以上方法就可以实现升序排序,输出结果为 1  2   3 

 降序排序结果3  2  1。

方法2是一种比较简单的方法。

以上两种方法您可根据您自己的需求选择,并且以上两种方法在VC++6.0环境下编译通过,也是自己在实践过程中的总结,如有不妥的地方,欢迎您指出,至于为什么这样使用,请参考 stl算法中sort 部分。

分享到:
评论

相关推荐

    C++自定义结构体排序实现

    "C++自定义结构体排序实现" C++中的结构体排序是指对自定义结构体类型的数据进行排序操作。排序是按照某个键值进行的,例如结构体中的某个成员变量。下面我们将介绍两种实现结构体排序的方法。 一、使用重载运算符...

    最快的排序算法 从最简单的vector中sort用法到自定义比较函数comp后对结构体排序的sort算法,排序算法数据结构

    本文将详细介绍`std::sort`的使用,包括基本的vector排序和自定义比较函数对结构体排序。 首先,`std::sort`函数通常用于排序容器(如vector)中的元素。在C++中,需要包含`&lt;algorithm&gt;`头文件来使用这个函数。以下...

    c++08.xcodeproj_结构体变量排序_源码

    在这个例子中,可能有三个结构体变量,每个结构体包含一组相关的数据。例如,可以定义一个表示学生信息的结构体: ```cpp struct Student { std::string name; int age; float score; }; ``` 接着,我们创建三...

    单例模板类+vector排序

    在项目"ConsoleApplication2"中,你可能会看到一个实际应用这个模板类的示例,包括如何定义结构体、如何创建和使用单例模板类,以及如何进行排序操作。这样的实现方式有助于代码的组织和可维护性,尤其是在大型项目...

    数据结构 直接插入排序的算法源程序

    初始时,已排序部分只包含序列中的第一个元素,而未排序部分则包含剩余的所有元素。排序过程就是从未排序部分依次取出元素,并将其插入到已排序部分的适当位置,使该元素与已排序部分的元素保持有序关系。 #### 三...

    C++ 关于STL中sort()对struct排序的方法

    在结构体或类的排序场景中,`sort()`默认的比较操作可能无法满足需求,因为结构体或类通常包含多个成员,而不仅仅是简单的数值。在这种情况下,我们需要自定义比较函数。文章中给出的例子是一个名为`PAIR`的结构体,...

    查找结构体向量变量(Vectors, structs and find)

    接下来,我们可以创建一个`std::vector&lt;MyStruct&gt;`来存储多个这样的结构体实例。 ```cpp std::vector&lt;MyStruct&gt; myVector; ``` 当我们需要查找具有特定ID的结构体并更新其`value`时,有几种方法可以实现: 1. **...

    C++_Vector用法深入剖析

    // 创建一个包含i数组中前两个元素的Vector ``` 5. **多维 Vector 的创建**: ```cpp vector&lt;vector&lt;类型&gt;&gt; vi; ``` 示例: ```cpp vector&lt;vector&lt;int&gt;&gt; v5; // 创建一个二维Vector vector&lt;int&gt; line; ...

    四川大学软件学院C++用vector改写电话本

    在电话本的例子中,我们可以创建一个`std::vector`来存储每个联系人的结构体,该结构体包含姓名和电话号码字段。 ```cpp struct Contact { std::string name; std::string phoneNumber; }; ``` 接下来,我们创建...

    vector的使用方法.pdf

    这篇文档主要介绍了`vector`的基本使用方法,包括定义、赋值、迭代器、增加元素、删除元素、引用元素、查找以及排序。 1. **定义和赋值**: - `vector&lt;int&gt; viCount;` 创建了一个空的整型`vector`。 - `vector...

    C++对文件排序并输出CSV文件

    4. **写入排序后的数据**:遍历排序后的容器,将每个结构体或类实例的字段写入到输出文件,确保每个字段间以逗号分隔,每行结束后换行。 在`Unit_Test_WriteCSV`这个测试文件中,可能包含了对上述功能的单元测试,...

    贪心和排序.pptx

    对于结构体排序,需要提供自定义的比较函数,如`cmp`,来指定排序依据。在STL中,`sort`函数可以用于`vector`,但不适用于`queue`和`stack`,因为它们不支持直接排序。`set`本身是有序的,而`map`虽然内部有序,但不...

    数字和字符排序(C++语言编写)

    在上述代码中,`Compare`结构体重载了小于操作符,用于根据pair的第一个元素(数字)和第二个元素(字符串)进行排序。 除了内置的`sort()`函数,C++还提供了其他排序算法,如`stable_sort()`(稳定排序)、`...

    TONGXUNLU.rar_vector_存储

    在C++中,这些信息可以被封装在一个结构体或类中,然后将这些对象存储在`std::vector`中。这样,通讯录可以轻松地增加新的联系人,或者根据需要查找和删除联系人。 `std::vector`提供了丰富的成员函数,如`push_...

    二叉排序树 平均查找长度的操作

    二叉排序树(Binary Sort Tree,BST),也称为二叉搜索树,是一种特殊的二叉树数据结构,它的每个节点都包含一个键值,且满足以下性质:对于任意节点,其左子树中的所有节点的键值都小于该节点的键值,而右子树中的...

    vector list map pair stl 标准模板库 c++

    STL的核心组件包括容器、迭代器、算法和函数对象。在这个主题中,我们将深入探讨四个关键的容器:vector、list、map以及pair,它们都是STL中的重要组成部分。 1. **vector**: - `vector`是一种动态数组,允许在...

    数据结构之排序向量类

    排序向量类通常是一个类或结构体,它基于数组(向量)并提供了排序功能。在C++中,std::vector是一个常用的数据结构,可以方便地存储和操作动态大小的元素序列。当我们将排序功能与std::vector结合时,就形成了一个...

    数据算法 使用冒泡法进行排序

    在C++中,我们可以定义一个类或结构体来实现冒泡排序的功能。这里提到的`miniVector`类看起来像是一个简化的动态数组,它提供了类似标准库`std::vector`的操作,如添加元素、删除元素以及访问元素等。这个类的成员...

    c语言实现图的拓扑排序

    一种常见的方式是使用邻接表来表示图,其中每个节点包含一个链表,链表中的元素代表与该节点相连的其他节点。在C语言中,可以定义如下结构体: ```c typedef struct Node { int data; struct Node* next; } Node;...

Global site tag (gtag.js) - Google Analytics