日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

vector 结构体类型 使用 排序

發布時間:2025/10/17 编程问答 11 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 结构体类型 使用 排序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。