vector 结构体类型 使用 排序
生活随笔
收集整理的這篇文章主要介紹了
vector 结构体类型 使用 排序
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
如果要在Vector容器中存放結構體類型的變量,經常見到兩種存放方式.
方式一:放入這個結構體類型變量的副本。方式二:放入指向這個結構體類型變量的指針。
假設結構體類型變量是這樣的, typedef struct student{char school_name[100];char gender;int age;bool is_absent; } StudentInfo;
那么,方式一和方式二的實現分別如下所示: /*[方式一] 結構體放棧中,vector中放副本---------------------*/ #include <iostream> #include <string> #include <vector> typedef struct student{char school_name[100];char gender;int age;bool is_absent; } StudentInfo;typedefstd::vector<StudentInfo> StudentInfoVec;void print(StudentInfoVec* stduentinfovec){for (int j=0;j<(*stduentinfovec).size();j++){std::cout<<(*stduentinfovec)[j].school_name<<"\t"<<(*stduentinfovec)[j].gender<<"\t"<<(*stduentinfovec)[j].age<<"\t"<<(*stduentinfovec)[j].is_absent<<"\t"<<std::endl;}return; }int main(){StudentInfo micheal={"Micheal",'m',18,false};StudentInfo cherry={"Cherry",'f',16,true};StudentInfoVec studentinfovec;studentinfovec.push_back(micheal);studentinfovec.push_back(cherry);print(&studentinfovec);return 0; }
方式一的輸出結果
/*[方式二] 結構體放入堆中,vector中放指針---------------------*/ typedef struct student{char* school_name;char gender;int age;bool is_absent; } StudentInfo;typedefstd::vector<StudentInfo*> StudentInfoPtrVec;void print(StudentInfoPtrVec*stduentinfoptrvec){for (int j=0;j<(*stduentinfoptrvec).size();j++){std::cout<<(*stduentinfoptrvec)[j]->school_name<<"\t"<<(*stduentinfoptrvec)[j]->gender<<"\t"<<(*stduentinfoptrvec)[j]->age<<"\t"<<(*stduentinfoptrvec)[j]->is_absent<<"\t"<<std::endl;}return; }int main(){StudentInfoPtrVec studentinfoptrvec;char* p_char_1=NULL;p_char_1=new char[100];strcpy(p_char_1,"Micheal");StudentInfo* p_student_1=new StudentInfo;p_student_1->school_name=p_char_1;p_student_1->gender='m';p_student_1->age=18;p_student_1->is_absent=false;studentinfoptrvec.push_back(p_student_1);char* p_char_2=NULL;p_char_2=new char[100];strcpy(p_char_2,"Cherry");StudentInfo* p_student_2=new StudentInfo;p_student_2->school_name=p_char_2;p_student_2->gender='f';p_student_2->age=16;p_student_2->is_absent=false;studentinfoptrvec.push_back(p_student_2);print(&studentinfoptrvec);delete p_char_1;delete p_student_1;delete p_char_2;delete p_student_2;return 0;}方式二的輸出結果,同上,依然是
類 結構體 使用實例
#include "stdafx.h" #include <vector> #include <string> using namespace std; class AClass { public:int num;string name; }; struct AStruct {int num;string name; }; void TestStruct() {//類的使用AClass Ac;vector<AClass> vc;Ac.num=10;Ac.name="name";vc.push_back(Ac);AClass d; for (vector<AClass>::iterator it=vc.begin();it<vc.end();++it) { d=*it; cout<<d.num<<endl; } //結構體的使用AStruct As;vector<AStruct> vs;As.num=10;As.name="name";vs.push_back(As);AStruct ds; for (vector<AStruct>::iterator it=vs.begin();it<vs.end();++it) { ds=*it; cout<<ds.num<<endl; } } void TestPoint() {//類的使用AClass *Ac=new AClass;vector<AClass *> vc;Ac->num=10;Ac->name="name";vc.push_back(Ac);AClass *d; for (vector<AClass*>::iterator it=vc.begin();it<vc.end();++it) { d=*it; cout<<d->num<<endl; } } int _tmain(int argc, _TCHAR* argv[]) {TestStruct();TestPoint();int n;cin>>n;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;} };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; }參考轉自:
http://blog.csdn.net/feliciafay/article/details/9128385
http://blog.csdn.net/loveheronly/article/details/7900799
http://blog.csdn.net/tigernana/article/details/7293758
總結
以上是生活随笔為你收集整理的vector 结构体类型 使用 排序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 剑指offer 算法 (知识迁移能力2)
- 下一篇: 词频统计 求最大k个数