stl sort算法之研究

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

sort模板有两种:

---------------------------------------------------------------------

template<class RanIt>

void sort(RanIt fist, RanIt last);

template<class RanIt, class Pred>

void sort(RanIt fist, RanIt last, Pred pr);

---------------------------------------------------------------------

第一种模板,sort重排[first,last)之间的元素,产生一个按operate<排列的序列。sort将序列中的元素以升序方式排列。

第二种模板和前一个的行为相似,不过它用pr(X,Y)代替了operate<(x,y)。

例子:

------------------------------

// tmp1.cpp : Defines the entry point for the console application.

//

#include "stdafx.h"

#include <vector>

#include <algorithm> // Include algorithms

#include <iostream>

using namespace std;

bool pr(int s1, int s2)

{

return s1>s2;

}

int main(int argc, char* argv[])

{

vector<int> vec;

vector<int>::iterator i;

vec.push_back (10);

vec.push_back (3);

vec.push_back (7);

sort(vec.begin(), vec.end(),pr); // Sort the vector

for (i = vec.begin(); i != vec.end(); i++)

{

cout<<*i<<endl;

}

return 0;

}

例子2:

--------------------------------------------------------------------------------------

// tmp1.cpp : Defines the entry point for the console application.

//

#include "stdafx.h"

#include <vector>

#include <algorithm> // Include algorithms

#include <iostream>

#include <string>

using namespace std;

class myless

{

public:

bool operator()( const int &a, const int &b) {

return a < b;

}

};

int main(int argc, char* argv[])

{

vector<int> vec;

vector<int>::iterator i;

vec.push_back (10);

vec.push_back (3);

vec.push_back (7);

sort(vec.begin(), vec.end(), myless()); // Sort the vector

for (i = vec.begin(); i != vec.end(); i++)

{

cout<<*i<<endl;

}

return 0;

}

例子3:

------------------------------------------------------------------------

// tmp1.cpp : Defines the entry point for the console application.

//

#include "stdafx.h"

#include <vector>

#include <algorithm> // Include algorithms

#include <iostream>

#include <string>

using namespace std;

typedef struct

{

string first;

string last;

}NAME;

bool sortbyfirst(const NAME& n1, const NAME& n2)

{

return (n1.first<n2.first);

}

bool sortbylast(const NAME& n1, const NAME& n2)

{

return (n1.last<n2.last);

}

int main(int argc, char* argv[])

{

vector<NAME> contacts;

vector<NAME>::iterator j;

NAME tmp;

tmp.first = "liu";

tmp.last = "bei";

contacts.push_back(tmp);

tmp.first = "zhao";

tmp.last = "yun";

contacts.push_back(tmp);

tmp.first = "gun";

tmp.last = "yu";

contacts.push_back(tmp);

tmp.first = "zhang";

tmp.last = "fei";

contacts.push_back(tmp);

cout<<"by first:"<<endl;

sort(contacts.begin(), contacts.end(), sortbyfirst);

for(j=contacts.begin(); j!= contacts.end(); j++)

{

cout<<j->first<<" "<<j->last<<endl;

}

cout<<"by last:"<<endl;

sort(contacts.begin(), contacts.end(), sortbylast);

for(j=contacts.begin(); j!= contacts.end(); j++)

{

cout<<j->first<<" "<<j->last<<endl;

}

return 0;

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航