C++ STL 常用排序算法

C++ STL 常用排序算法

 

merge()

以下是排序和通用算法:提供元素排序策略
merge: 合并两个有序序列,存放到另一个序列。

例如:

vecIntA,vecIntB,vecIntC是用vector<int>声明的容器,
vecIntA已包含1,3,5,7,9元素,
vecIntB已包含2,4,6,8元素
vecIntC.resize(9); //扩大容量
merge(vecIntA.begin(),vecIntA.end(),vecIntB.begin(),vecIntB.end(),vecIntC.begin());
此时vecIntC就存放了按顺序的1,2,3,4,5,6,7,8,9九个元素

 

sort()

sort: 以默认升序的方式重新排列指定范围内的元素。若要改排序规则,可以输入比较函数。

//学生类
Class CStudent:
{
public:
       CStudent(int iID, string strName)
       {
              m_iID=iID;
              m_strName=strName;
       }
public:
       int m_iID;
       string m_strName;
}

//学号比较函数
bool Compare(const CStudent &stuA,const CStudent &stuB)
{
       return (stuA.m_iID<strB.m_iID);
}

void main()
{
       vector<CStudent> vecStu;
       vecStu.push_back(CStudent(2,"老二"));
       vecStu.push_back(CStudent(1,"老大"));
       vecStu.push_back(CStudent(3,"老三"));
       vecStu.push_back(CStudent(4,"老四"));
       sort(vecStu.begin(),vecStu.end(),Compare); // 此时,vecStu容器包含了按顺序的"老大对象","老二对象","老三对象","老四对象"
}

 

random_shuffle()

random_shuffle: 对指定范围内的元素随机调整次序。
srand(time(0)); //设置随机种子

 

vector<int> vecInt;
vecInt.push_back(1);
vecInt.push_back(3);
vecInt.push_back(5);
vecInt.push_back(7);
vecInt.push_back(9);

string str("itcastitcast ");
random_shuffle(vecInt.begin(), vecInt.end()); //随机排序,结果比如:9,7,1,5,3
random_shuffle(str.begin(), str.end()); //随机排序,结果比如:" itstcasticat "

 

reverse()  逆序

vector<int> vecInt;
vecInt.push_back(1);
vecInt.push_back(3);
vecInt.push_back(5);
vecInt.push_back(7);
vecInt.push_back(9);
reverse(vecInt.begin(), vecInt.end()); //{9,7,5,3,1}

 

posted @ 2017-11-06 15:29  lsgxeva  阅读(647)  评论(0编辑  收藏  举报