C++向量的比较

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chengqiuming/article/details/89784646

一 点睛

vector是个模板类,可以存放任何类型的对象。在vector中存放结构体时,可以按照自定义的排序方式排序。

二 vector中存放结构体时的排序

1 代码

#include<algorithm>
#include<vector>
#include<iostream>
using namespace std;

typedef struct rect{
    int id;
    int length;
    int width;
    bool operator< (const rect &a) const{
        if(id!=a.id)
            return id<a.id;
        else{
            if(length!=a.length)
                return length<a.length;
            else
                return width<a.width;
        }
    }
}Rect;

int main(){
    vector<Rect> vec;
    Rect rect;
    rect.id=2;
    rect.length=3;
    rect.width=4;
    vec.push_back(rect);
    rect.id=1;
    rect.length=2;
    rect.width=3;
    vec.push_back(rect);
    vector<Rect>::iterator it=vec.begin();
    cout<<(*it).id<<' '<<(*it).length<<' '<<(*it).width<<endl;  
    sort(vec.begin(),vec.end());
    cout<<(*it).id<<' '<<(*it).length<<' '<<(*it).width<<endl;  
    return 0;
}

2 运行

[root@localhost charpter03]# g++ 0310.cpp -o 0310
[root@localhost charpter03]# ./0310
2 3 4
1 2 3

3 说明

vec中存放的是结构体Rect。vec未进行排序前,将会按照push_back的时间顺序排序,并不会自动排序。排序后可以按照结构体中对rect的重载方式进行排序;按照id、length、width升序排序,然后用<algorithm>中的sort函数排序。

三 结构体外定义比较函数进行排序

1 代码

#include<algorithm>
#include<vector>
#include<iostream>
using namespace std;

typedef struct rect{
    int id;
    int length;
    int width;
}Rect;
int cmp(Rect a,Rect b){
    if(a.id!=b.id)
        return a.id<b.id;
    else{
        if(a.length!=b.length)
            return a.length<b.length;
        else
            return a.width<b.width;
    }
}

int main(){
    vector<Rect> vec;
    Rect rect;
    rect.id=2;
    rect.length=3;
    rect.width=4;
    vec.push_back(rect);
    rect.id=1;
    rect.length=2;
    rect.width=3;
    vec.push_back(rect);
    vector<Rect>::iterator it=vec.begin();
    cout<<(*it).id<<' '<<(*it).length<<' '<<(*it).width<<endl;  
    sort(vec.begin(),vec.end(),cmp);
    cout<<(*it).id<<' '<<(*it).length<<' '<<(*it).width<<endl;  
    return 0;
}

2 运行

[root@localhost charpter03]# g++ 0311.cpp -o 0311
[root@localhost charpter03]# ./0311
2 3 4
1 2 3

3 说明

该例并为对结构体中的<进行重载,而是在结构体外定义了一个比较函数;另外sort的调用方式也不相同,加了比较函数作为第3个参数。

猜你喜欢

转载自blog.csdn.net/chengqiuming/article/details/89784646