`
eggbucket
  • 浏览: 186540 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

C++ vector 排序

    博客分类:
  • C++
 
阅读更多

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++ Vector使用方法

    C++中的`std::vector`是一个非常重要的标准模板库(STL)容器,它提供了一种动态数组的功能。在C++编程中,`vector`经常用于处理动态大小的序列数据,其内部存储空间是连续的,这使得随机访问元素非常高效。下面我们将...

    STL使用_Vector排序

    在“STL使用_Vector排序”这个项目中,开发者使用VC++(Visual C++)创建了一个控制台应用程序,目的是演示如何对`vector`对象进行排序。`vector`中的元素可能是任意类型,包括基本类型如整数或浮点数,也可能是...

    C++_Vector用法深入剖析

    ### C++ Vector 用法深入剖析 #### 一、Vector 的基本概念与使用场景 Vector 是 C++ 标准模板库 (STL) 中的一种容器,它可以被理解为一种能够自动管理内存的动态数组。Vector 支持随机访问,并且在内部通过一个...

    实现从vector中过滤重复的数据

    在C++编程中,`std::vector`是一个常用的容器,用于存储同类型的元素序列。然而,在处理数据时,我们有时需要去除其中的重复项。这篇博客文章“实现从vector中过滤重复的数据”提供了几种方法来解决这个问题。我们将...

    随机排序(c++和vb)

    随机排序(C++和VB) 随机排序是一种特殊的排序算法,它不同于传统的升序排序和降序排序。随机排序可以将数据的顺序随机打乱,而不是按照一定的顺序进行排序。本文将介绍随机排序的概念、分类、算法实现及应用。 1...

    C++ vector 向量基础及应用教程

    内容概要:本文档详细介绍了C++中vector向量的基础用法,包括定义向量、向量的初始化方法、基本算法的应用以及向量排序技巧。此外还讲解了如何利用vector来处理复杂的数据结构,比如定义并管理含有多个属性的学生或...

    VC++中vector的使用方法及其元素随机

    该资源在VS2008 SP1 IDE中实现,主要功能是介绍VC++中vector的使用方法,包括vector的定义、写入数据、读取数据、清空数据以及如何将vector中的数据元素进行随机打乱顺序等。将对你掌握vector的使用起到巨大的帮助。...

    利用C++向量的简单排序

    本资源旨在介绍利用C++中的Vector实现简单排序的方法。该资源通过实例代码,详细地展示了如何使用Vector容器来存储整数,并使用选择排序算法对其进行排序。 知识点一:C++中的Vector容器 Vector是一种 Sequence ...

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

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

    插入排序的C++实现

    在C++中,我们可以利用STL中的`std::vector`容器和迭代器来实现插入排序。 ### 插入排序基本步骤: 1. **初始化**:创建一个空的已排序序列(通常用一个`vector`表示),将第一个元素视为已排序。 2. **主循环**:...

    排序

    《C++标准库中的&lt;vector&gt;排序详解》 在C++编程中,容器是管理对象集合的重要工具,其中&lt;vector&gt;作为最常用的序列容器之一,提供了高效、灵活的数据存储和操作方式。本文将深入探讨如何对&lt;vector&gt;进行排序,帮助...

    c++希尔排序算法实现源代码 原创

    在C++中实现希尔排序,我们可以利用STL中的容器如vector,以及标准算法库中的功能来简化代码编写。 下面是一个简单的C++实现希尔排序的源代码示例: ```cpp #include #include &lt;vector&gt; void shellSort(std::...

    std::vector排序详解

    在C++编程中,`std::vector`是一个非常重要的容器,它允许我们动态地存储一组同类型的元素。本文将深入探讨`std::vector`的排序功能,包括如何使用内置的排序算法以及如何自定义比较函数。 `std::sort`是C++标准库...

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

    如果提供高效的搜索机制,如二分查找,可能需要先对`vector`进行排序。 3. **更新联系人信息**:找到要修改的联系人,然后直接修改对应的结构体成员。 ```cpp for (auto& contact : phoneBook) { if (contact....

    vector 排序

    在C++中对`vector`容器进行排序是一个常见的操作需求,尤其当`vector`中存储的是自定义数据类型(如结构体或类)时,排序的实现方式可能会变得稍微复杂一些。本文将详细介绍如何对存储自定义类型的`vector`进行升序...

    C++归并排序与快速排序实现.zip

    为了提高效率,C++程序员通常会利用STL(Standard Template Library)中的`vector`容器,它提供了方便的内存管理,同时可以避免原始数组带来的指针操作。此外,C++11引入的右值引用和move语义也可能在这些排序算法的...

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

    在C++编程中,对文件中的数据进行排序并输出到CSV文件是一项常见的任务,尤其在数据分析、报表生成或数据处理的场景下。本项目提供的功能实现了这一需求,具有良好的代码可读性和实用性。下面我们将详细探讨相关的...

    用C++实现快速排序

    在C++中实现快速排序,首先我们需要理解算法的步骤: 1. **选择基准元素(Pivot Selection)**:在待排序的序列中选取一个元素作为基准,通常选择第一个或最后一个元素,但为了提高效率,可以随机选取。 2. **分区...

    C++中vector可以作为map的键值实例代码

    C++中vector可以作为map的键值实例代码 在C++中,使用map数据结构时,通常会遇到键值类型的限制问题。 Map容器使用红黑树作为底层数据结构,要求键值类型必须定义合法的比较运算符,以便实现快速查找和排序。这也...

    C++归并排序测试程序

    在C++中实现归并排序,我们可以按照以下步骤进行: 1. **分治思想**:归并排序的核心是将一个大数组分为两个或多个小数组,分别对这些小数组进行排序,然后将排序好的小数组合并成一个大的有序数组。这一过程通过...

Global site tag (gtag.js) - Google Analytics