C++分析——特殊容器STL使用

排序容器sort

排序容器sort,将数组的元素从大到小或从小到达排序;
乱序容器random_shuffle,将数组的元素的顺序随机打乱,需要配合随机因子。

头文件:#include

使用默认排序比较

    std::vector<int> Value;
    Value.push_back(1);
    Value.push_back(3);
    Value.push_back(5);
    Value.push_back(7);
    Value.push_back(9);
    Value.push_back(6);
    Value.push_back(9);
    Value.push_back(2);
    Value.push_back(4);

//默认从小到大排序
    std::sort(Value.begin(), Value.end());
    Show_info(Value);

    cout << "Next " << endl;

//加入比较器,比较类型为int值,从大到小排序
    std::sort(Value.begin(), Value.end(),std::greater<int>());
    Show_info(Value);

执行结果

$ ./project.o 
CSystem is called.

int vertor info is 1
int vertor info is 2
int vertor info is 3
int vertor info is 4
int vertor info is 5
int vertor info is 6
int vertor info is 7
int vertor info is 9
int vertor info is 9
Next 
int vertor info is 9
int vertor info is 9
int vertor info is 7
int vertor info is 6
int vertor info is 5
int vertor info is 4
int vertor info is 3
int vertor info is 2
int vertor info is 1

使用自定义比较器比较

通常,比较的类型不仅仅是值层面的比较,还需要类的比较,比较后将他们重新排序。这时候需定义类的比较器,并重载“<”和“>”号。

定义一个类,类成员函数有ID值和数值

class CInfo
{
public:
    CInfo():index(0),m_number(0){}
    CInfo(int index_value,int number_value):index(index_value),m_number(number_value){}
    ~CInfo(){index = 0;m_number = 0;}

    void set_index(int value){ index = value;}
    int get_index(){return index;}

    void set_number(int value){ m_number = value;}
    int get_number(){return m_number;}

    //定义比较器比较大的值
    static bool Cmp(CInfo &origin_value,CInfo &cmp_calue)
    {
        return origin_value > cmp_calue;
    }

    //重载<
    bool operator<(CInfo &value)
    {
        return this->m_number < value.m_number;
    }
    //重载>
    bool operator>(CInfo &value)
    {
        return this->m_number > value.m_number;
    }
    //重载os输出 <<
    friend std::ostream& operator<< (std::ostream &os,CInfo &out)
    {
        os<< "Info index is " << out.index << " number is "<< out.m_number <<std::endl;
        return os;
    }
    //重载os输出 <<
    friend std::ostream& operator<<(std::ostream &os,std::vector<CInfo> &out)
    {
        std::vector<CInfo>::iterator iter = out.begin();

        while(iter != out.end())
        {
            os << *iter;
            iter++;
        }

        return os;
    }

private:
    int index;
    int m_number;
};

以及定义这个类的容器
std::vector Class_Value;

容器里面的值是在不同时期加进去的,里面顺序数值随机,此时需要根据类中成员变量m_number的值,对这个类的容器里面的值进行从大到小或从小到大排序。

测试源码:

    srand((unsigned)time(NULL));
    std::vector<CInfo> Class_Value;

    for(int i = 0;i < 10;i++)
    {
        //生成随机数
        CInfo info(rand()%10, rand()%100);
        Class_Value.push_back(info);
    }

    cout << Class_Value << endl;

    cout << "Sorting after ... " << endl;
    std::sort(Class_Value.begin(), Class_Value.end(),CInfo::Cmp);
    cout << Class_Value << endl;

执行结果

$ ./project.o 
CSystem is called.
Info index is 9 number is 56
Info index is 6 number is 14
Info index is 3 number is 97
Info index is 8 number is 97
Info index is 8 number is 67
Info index is 5 number is 87
Info index is 5 number is 51
Info index is 7 number is 64
Info index is 8 number is 67
Info index is 3 number is 92

"Sorting after ...
Info index is 3 number is 97
Info index is 8 number is 97
Info index is 3 number is 92
Info index is 5 number is 87
Info index is 8 number is 67
Info index is 8 number is 67
Info index is 7 number is 64
Info index is 9 number is 56
Info index is 5 number is 51
Info index is 6 number is 14

乱序容器random_shuffle

乱序容器是将容器内的成员随机打乱顺序,顺序的随机程度由随机种子决定。
头文件:#include

测试源码:

    //依据时间生成随机种子
    srand((unsigned)time(NULL));

    std::vector<int> Class_Value;

    for (int i = 0; i < 10; i++)
    {
        Class_Value.push_back(i);
    }

    cout << "random shuffle after ... " << endl;
    random_shuffle(Class_Value.begin(), Class_Value.end());

    std::vector<int>::iterator iter = Class_Value.begin();

    while (iter != Class_Value.end())
    {
        cout << "vector number is " << *iter << endl;

        iter++;
    }

执行结果

$ ./project.o 
CSystem is called.
random shuffle after ... 
vector number is 8
vector number is 4
vector number is 6
vector number is 2
vector number is 5
vector number is 9
vector number is 3
vector number is 7
vector number is 0
vector number is 1

猜你喜欢

转载自blog.csdn.net/zxng_work/article/details/79839592
今日推荐