【笔记】 sort的用法
来源:互联网 发布:sql 标识符无效 编辑:程序博客网 时间:2024/05/17 08:33
从别人哪里转载来的
网址是
http://bbs.ecust.edu.cn/archiver/?tid-14302.html
因为在学,怕忘了,算作是笔记吧
sort的用法
按照给定的方案给区间中的元素排序。
加载头文件#include<algorithm>
函数原型:
template<class RandomAccessIterator>
void sort (RandomAccessIterator _First, RandomAccessIterator _Last);
template<class RandomAccessIterator, class BinaryPredicate>
void sort (RandomAccessIterator _First, RandomAccessIterator _Last, BinaryPredicate _Comp);
传入参数说明:
_First 要排序区间的起始位置
_Last 要排序区间的结束位置
_Comp 自定义的表示顺序关系的函数对象。
说明:
要排序区间必须是合法的,并且所有元素是可提领的。区间中的元素必须是在有限步内可达的。
该算法不是稳定的,不保持元素的相对先后顺序。
该算法的平均的时间复杂性为O(N long N),中 N = _Last-_First
演示sort的功能及使用方法;
[code]
#include <algorithm>
#include <iostream>
using namespace std;
#define N 5
struct Node
{
int elem1;
int elem2;
};
bool mycmp(const Node & a, const Node & b)
//貌似这里定义的关系必须是一个(良序X)的关系……否则sort将不能正常工作。
{
return a.elem1<b.elem1;
}
int main()
{
Node node[N];
for(int i=0;i<N;++i)
{
node[i].elem1=N-i;
node[i].elem2=i;
}
sort(node, node+N, mycmp);
//使用mycmp对结构体数组以第一个元素排序,排序后结构体数组以第一元素从小到大排列
return 0;
}
[/code]
[[i] 本帖最后由 Jonas 于 2006-8-12 14:44 编辑 [/i]]
按照给定的方案给区间中的元素排序。
加载头文件#include<algorithm>
函数原型:
template<class RandomAccessIterator>
void sort (RandomAccessIterator _First, RandomAccessIterator _Last);
template<class RandomAccessIterator, class BinaryPredicate>
void sort (RandomAccessIterator _First, RandomAccessIterator _Last, BinaryPredicate _Comp);
传入参数说明:
_First 要排序区间的起始位置
_Last 要排序区间的结束位置
_Comp 自定义的表示顺序关系的函数对象。
说明:
要排序区间必须是合法的,并且所有元素是可提领的。区间中的元素必须是在有限步内可达的。
该算法不是稳定的,不保持元素的相对先后顺序。
该算法的平均的时间复杂性为O(N long N),中 N = _Last-_First
演示sort的功能及使用方法;
[code]
#include <algorithm>
#include <iostream>
using namespace std;
#define N 5
struct Node
{
int elem1;
int elem2;
};
bool mycmp(const Node & a, const Node & b)
//貌似这里定义的关系必须是一个(良序X)的关系……否则sort将不能正常工作。
{
return a.elem1<b.elem1;
}
int main()
{
Node node[N];
for(int i=0;i<N;++i)
{
node[i].elem1=N-i;
node[i].elem2=i;
}
sort(node, node+N, mycmp);
//使用mycmp对结构体数组以第一个元素排序,排序后结构体数组以第一元素从小到大排列
return 0;
}
[/code]
[[i] 本帖最后由 Jonas 于 2006-8-12 14:44 编辑 [/i]]
2006-8-11 23:29 ddotcdot
良序关系的说法是不准确的,因为良序关系是一种全序关系,这恰恰是不正确的。
准确的说法是严格弱序关系(strict weak ordering),满足非自反性(irreflexive),反对称性(antisymmetric),传递性(transitive)以及等价传递性(transitivity of equivalence)。其中前三条定义的是严格偏序关系(strict partial ordering)。良序关系虽然是偏序关系,但不是严格偏序关系,因为其不满足非自反性,因此不是严格弱序关系。
设x,y为集合S中的元素,R为S上的严格弱序关系,则当x R y和y R x都不满足时,x与y等价。例如实数集上的<关系和>关系都是严格弱序的,而<=和>=就不是。因为如a<b<d,a<c<d且没有其他元素或关系存在时,可知b与c等价,而a<=b<=d,a<=c<=d且没有其他元素或关系存在的情况下,并不能推出b与c等价。
当然实际使用的时候并不需要考虑那么多。只需要知道,因为是“严格”的,所以只有像<这样的关系,而没有像<=这样的关系。换句话讲,如果你要定义<的关系,则你的谓词只有在<的情况下才能返回true,其他情况(如=和>)下一律要返回false。在sort中使用非严格弱序关系的后果是不确定的,根据编译器实现的不同,可能会正常工作,也可能会引起未定义的行为,导致死循环或非法操作。这是初学者通常会犯的错误(我当年就犯过:()。
准确的说法是严格弱序关系(strict weak ordering),满足非自反性(irreflexive),反对称性(antisymmetric),传递性(transitive)以及等价传递性(transitivity of equivalence)。其中前三条定义的是严格偏序关系(strict partial ordering)。良序关系虽然是偏序关系,但不是严格偏序关系,因为其不满足非自反性,因此不是严格弱序关系。
设x,y为集合S中的元素,R为S上的严格弱序关系,则当x R y和y R x都不满足时,x与y等价。例如实数集上的<关系和>关系都是严格弱序的,而<=和>=就不是。因为如a<b<d,a<c<d且没有其他元素或关系存在时,可知b与c等价,而a<=b<=d,a<=c<=d且没有其他元素或关系存在的情况下,并不能推出b与c等价。
当然实际使用的时候并不需要考虑那么多。只需要知道,因为是“严格”的,所以只有像<这样的关系,而没有像<=这样的关系。换句话讲,如果你要定义<的关系,则你的谓词只有在<的情况下才能返回true,其他情况(如=和>)下一律要返回false。在sort中使用非严格弱序关系的后果是不确定的,根据编译器实现的不同,可能会正常工作,也可能会引起未定义的行为,导致死循环或非法操作。这是初学者通常会犯的错误(我当年就犯过:()。
- 【笔记】 sort的用法
- SORT的详细用法
- sort 的用法详解
- sort 命令的用法
- Arrays.sort()的用法
- sort函数的用法
- *sort的一些用法*
- sort的高深用法
- sort的用法
- sort的用法
- sort函数的用法
- STL的sort用法
- Sort函数的用法
- sort函数的用法
- sort的用法
- linux sort的用法
- sort函数的用法
- sort函数的用法
- VC如何调试DLL
- NHibernate的灵活配置
- CSS 分类 (Classification)(十八)
- scjp题目解析(十一)
- CSS 定位 (Positioning)(十九)
- 【笔记】 sort的用法
- Database-basic knowledge(Oracle)
- Linux下mysql安装
- CSS 伪类 (Pseudo-classes)(二十)
- PE教程1: PE文件格式一览
- CSS 伪元素 (Pseudo-elements)(二十一)
- scjp题目解析(十二)
- .NET设计模式(2):单件模式(Singleton Pattern)
- CSS2 媒介类型(二十二)