C++ STL中的sort排序算法

问题描述

C++ STL中的sort排序算法

#define _CRT_SECURE_NO_WARNINGS
#include"iostream"
using namespace std;
#include"vector"
#include"list"
#include"set"
#include"algorithm"
#include"functional"
class teacher
{
public:
int age;
char *name;
public:
teacher()
{
this->name = new char[1];
strcpy(this->name, 0);
this->age = 0;
}
teacher(char *name,int age)
{
this->name = new char[strlen(name) + 1];
this->age = age;
strcpy(this->name, name);
}
teacher(const teacher&obj)
{
this->name = new char[strlen(obj.name) + 1];
this->age =obj.age;
strcpy(this->name, obj.name);
}

~teacher()
{
    if (this->age != NULL)
    {
        delete[]this->name;
    }
    this->age = 0;
    this->name = NULL;
}
teacher* operator = (teacher&obj)
{
    teacher* p;
    p = &obj;
    return p;
}
bool operator<(const teacher  obj5)
{
    return this->age < obj5.age;
}

};

bool chang(teacher obj1, teacher obj2)
{

cout << obj1.name << endl;
if (obj1.age < obj2.age)
{
return true;
}
else
{
return false;
}
}

void main02()
{
teacher ouyangdian("ouyangdian", 18);
teacher wuhui("wuhui",25);
teacher wudong("wudong", 19);
teacher zhuwenjun("zhuwenjun", 17);
vector array;
array.push_back(ouyangdian);
array.push_back(wuhui);
array.push_back(wudong);
array.push_back(zhuwenjun);
vector::iterator it = array.begin();
sort(it, array.end(),chang);
vector::iterator it1 = array.begin();
for (it1; it1 != array.end(); it1++)
{
cout << it1->name << " " << it1->age << endl;
}
}

void main()
{
//main03();
main02();
system("pause");
return;
}

请各位大神看看这段代码,为何不能实现排序呢。。跪求

解决方案

C++之所以得到这么多人的喜欢,是因为它既具有面向对象的概念,又保持了C语言高效的特点。STL 排序算法同样需要保持高效。因此,对于不同的需求,STL提供的不同的函数,不同的函数,实现的算法又不尽相同。
1.1 所有sort算法介绍
所有的sort算法的参数都需要输入一个范围,[begin, end)。这里使用的迭代器(iterator)都需是随机迭代器(RadomAcce......
答案就在这里:STL sort排序算法详细介绍

解决方案二:

vectorarray;

解决方案三:

明明加了为什么上面的回答显示不出来... 重新贴一次, vector必须加元素类型, 你上面的代码能编的过?? 编译都会出错, 怎么会知道无法排序......

 vector<teacher> array;
 vector<teacher>::iterator;

解决方案四:

代码问题不少,但你没说清问题到底出在哪里是sort排序的结果不对吗

解决方案五:

排序是没问题的,问题在=赋值运算符上,注释掉的话排序就对了
楼主再修改下

 #define _CRT_SECURE_NO_WARNINGS
#include"iostream"
using namespace std;
#include"vector"
#include"list"
#include"set"
#include"algorithm"
#include"functional"
class teacher
{
public:
    int     age;
    char    *name;
public:
    teacher()
    {
        this->name = new char[1];
        strcpy(this->name, 0);
        this->age = 0;
    }
    teacher(char *name, int age)
    {
        this->name = new char[strlen(name) + 1];
        this->age = age;
        strcpy(this->name, name);
    }

    teacher(const teacher&obj)
    {
        this->name = new char[strlen(obj.name) + 1];
        this->age = obj.age;
        strcpy(this->name, obj.name);
    }
    /*
    ~teacher()
    {
        if (this->age != NULL)
        {
            delete[]this->name;
        }
        this->age = 0;
        this->name = NULL;
    }

    teacher* operator = (teacher&obj)
    {
        teacher* p;
        p = &obj;
        return p;
    }*/
    bool operator <(const teacher obj5)
    {
        return this->age < obj5.age;
    }
};

bool chang(teacher obj1, teacher obj2)
{
    cout << obj1.name << endl;
    if (obj1.age < obj2.age)
    {
        return true;
    }
    else
    {
        return false;
    }
}

void main02()
{
    teacher     ouyangdian("ouyangdian", 18);
    teacher     wuhui("wuhui", 25);
    teacher     wudong("wudong", 19);
    teacher     zhuwenjun("zhuwenjun", 17);
    vector<teacher> array;
    array.push_back(ouyangdian);
    array.push_back(wuhui);
    array.push_back(wudong);
    array.push_back(zhuwenjun);
    vector<teacher>::iterator it = array.begin();
    sort(it, array.end(), chang);
    vector<teacher>::iterator it1 = array.begin();
    for (it1; it1 != array.end(); it1++)
    {
        cout << it1->name << "  " << it1->age << endl;
    }
}

void  main()
{
    //main03();
    main02();
    system("pause");
    return;
}

时间: 2025-01-20 15:48:47

C++ STL中的sort排序算法的相关文章

STL中的sort和unique函数

问题描述 STL中的sort和unique函数 编了一个小程序,对STL算法中的sort()和unique()进行了测试,发现unique()输出结果不正确.程序如下: #include <iostream> #include <algorithm> #include <vector> using namespace std; int main() { int array[8]={1,5,4,5,3,100,2,100}; vector<int> ivec(

C/C++中的经典排序算法总结

C/C++中的经典排序算法总结 在C/C++中,有一些经典的排序算法,例如:冒泡排序.鸡尾酒排序或双向冒泡排序(改进的冒泡排序).选择排序.直接插入排序.归并排序.快速排序.希尔排序和堆排序等等.下面对这些排序算法进行一一解析并给出示例代码以共享之. 1.冒泡排序 冒泡排序是最基本的排序算法,之所以称之为冒泡排序是因为在冒泡排序的过程中总是大数往前放,小数往后放,相当于气泡上升. 冒泡排序的基本原理是:依次比较相邻的两个数,将大数放在前面,小数放在后面. 影响冒泡排序算法性能的主要部分就是循环和

C++list中使用sort排序

问题描述 C++list中使用sort排序 #include#include#include#include #include#include #include #include using namespace std;//定义学生类class Student{public: string StuName; //姓名 string StuNum; //学号 string Sex; //性别 //成绩 float English; //英语 float SQL; //SQL float Prob;

模拟javascript中的sort排序(简单实例)_javascript技巧

一.javascript中sort对数据进行排序的原理 sort() 方法对数组的元素做原地的排序,并返回这个数组. sort 可能不是稳定的.默认按照字符串的Unicode码位点排序; 语法:arr.sort([compareFunction]) 参数 compareFunction 可选.用来指定按某种顺序进行排列的函数.如果省略,元素按照转换为的字符串的诸个字符的Unicode位点进行排序. 如果 compareFunction(a, b) 小于 0 ,那么 a 会被排列到 b 之前: 如

java中实现希尔排序算法

package Utils.Sort; /**   *希尔排序,要求待排序的数组必须实现Comparable接口   */   public class ShellSort implements SortStrategy   {   private int[] increment; /**   *利用希尔排序算法对数组obj进行排序   */   public void sort(Comparable[] obj)   {   if (obj == null)   {   throw new N

JavaScript中几种排序算法的简单实现_基础知识

排序算法的实现 我的JS水平就是渣渣,所以我就用类似于JAVA和C的方式来写JavaScript的排序算法了. 而且这里我不讲算法原理,仅仅只是代码实现,可能会有Bug,欢迎大家博客评论指导.插入排序 插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法.它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入.插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排

java中Collections.sort排序函数用法详解_java

Comparator是个接口,可重写compare()及equals()这两个方法,用于比价功能:如果是null的话,就是使用元素的默认顺序,如a,b,c,d,e,f,g,就是a,b,c,d,e,f,g这样,当然数字也是这样的. compare(a,b)方法:根据第一个参数小于.等于或大于第二个参数分别返回负整数.零或正整数. equals(obj)方法:仅当指定的对象也是一个 Comparator,并且强行实施与此 Comparator 相同的排序时才返回 true. Collections.

Javascript中的常见排序算法_javascript技巧

具体代码及比较如下所示: 复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  <html xmlns="http://www.w3.org/1999/xhtml" lang="gb2312">

php-redis中的sort排序函数总结_php技巧

很多人把redis当成一种数据库,其实是利用redis来构造数据库的模型,有那种数据库的味道.但是在怎么构建还是key和value的关系,与真正的关系型数据库还是不一样的. 效率高,不方便:方便的,效率不高:又方便,效率又高的要花钱. php-redis里面的sort函数,在做web的时候取数据还是比较方便,有点关系型数据库的味道.在说sort前,先说一下前面漏的几个比较常用的函数.  1) keys 描述:查找符合给定模式的key 参数:匹配模式 返回值:符合给定模式的key列表 2) mse