vector元素為自訂資料時如何進行排序

來源:互聯網
上載者:User

方法一:在結構體中重載<  、>運算子,調用STL的sort()函數

#include "stdafx.h"
#include <vector>
#include <algorithm>
#include <iostream>

using namespace std;

class  MYSTRUCT
{
public:
int id;
int nums;
vector<int> vec;

MYSTRUCT()
{
id=numeric_limits<int>::max();
nums=0;
vec.resize(0);
}

//重載==
bool operator==( const MYSTRUCT& objstruct) const
{
return objstruct.id==id;
}

//重載<
bool operator<(const MYSTRUCT& objstruct) const
{
return id<objstruct.id;
}

//重載>
bool operator>(const MYSTRUCT& objstuct) const
{
return id>objstuct.id;
}
};

int _tmain(int argc, _TCHAR* argv[])
{
vector<MYSTRUCT> structs;

for(int i=0;i<9;i++)
{
MYSTRUCT myStruct;
//myStruct.id=i;
myStruct.nums=i;
structs.push_back(myStruct);
}

structs[0].id=9;
structs[1].id=1;
structs[2].id=7;
structs[3].id=3;
structs[4].id=8;
structs[5].id=2;
        structs[6].id=6;
structs[7].id=0;
structs[8].id=10;

sort(structs.begin(),structs.end());

for(vector<MYSTRUCT>::iterator it=structs.begin();it!=structs.end();++it)
{

std::cout<<it->id<<endl;
}

return 0;
}


方法二:
單獨定義比較函數,調用STL的sort()函數,不修改結構體

#include "stdafx.h"
#include <vector>
#include <algorithm>
#include <iostream>

using namespace std;

class  MYSTRUCT
{
public:
int id;
int nums;
vector<int> vec;

MYSTRUCT()
{
id=numeric_limits<int>::max();
nums=0;
vec.resize(0);
}

// //重載==
// bool operator==( const MYSTRUCT& objstruct) const
// {
// return objstruct.id==id;
// }
// 
// //重載<
// bool operator<(const MYSTRUCT& objstruct) const
// {
// return id<objstruct.id;
// }
// 
// //重載>
// bool operator>(const MYSTRUCT& objstuct) const
// {
// return id>objstuct.id;
// }
};

bool lessCompare(const MYSTRUCT& obj1,const MYSTRUCT&  obj2)
{
return obj1.id<obj2.id;
}

bool greaterCompare(const MYSTRUCT& obj1,const MYSTRUCT& obj2)
{
return obj1.id>obj2.id;
}

int _tmain(int argc, _TCHAR* argv[])
{
vector<MYSTRUCT> structs;

for(int i=0;i<9;i++)
{
MYSTRUCT myStruct;
//myStruct.id=i;
myStruct.nums=i;
structs.push_back(myStruct);
}

structs[0].id=9;
structs[1].id=1;
structs[2].id=7;
structs[3].id=3;
structs[4].id=8;
structs[5].id=2;
        structs[6].id=6;
structs[7].id=0;
structs[8].id=10;

sort(structs.begin(),structs.end(),lessCompare);

for(vector<MYSTRUCT>::iterator it=structs.begin();it!=structs.end();++it)
{

std::cout<<it->id<<endl;
}

return 0;
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.