C++按照成员变量排序实例 (附C++代码)

版权声明:——转载请留言询问—— https://blog.csdn.net/weixin_44344462/article/details/88308771

思路

C++标准库中,排序函数sort接受一个返回值为bool的函数作为第三参数,来对以第一和第二参数确定的序列,按照第三参数的要求排序。

这里将简要探讨

  • 上述第三参数的编写形式
  • 需要注意的一个地方,即类中变量不可声明为const

效果

——————排序前——————

大小 : 7 重量 : 49

大小 : 23 重量 : 8

大小 : 30 重量 : 22

大小 : 44 重量 : 28

大小 : 23 重量 : 9

——————按照size排序后——————

大小 : 7 重量 : 49

大小 : 23 重量 : 8

大小 : 23 重量 : 9

大小 : 30 重量 : 22

大小 : 44 重量 : 28

——————按照weight排序后——————

大小 : 23 重量 : 8

大小 : 23 重量 : 9

大小 : 30 重量 : 22

大小 : 44 重量 : 28

大小 : 7 重量 : 49

代码以及注意事项

定义一个石头类

注意:若要针对实例中的某一元素来排序,则该类中的成员变量不可以声明为const类型,原因是sort函数在底层会调用一个swap即交换函数,如果类中的变量以const类型声明,则底层调用失败

class stone {
public:
    int size;
    int weight;
    
    // 析构函数
    virtual ~stone() {}
    
    // 构造函数
    explicit stone(const float & size, const float & weight)
    :size(size), weight(weight) {}
};

按照石头的大小、重量排序的传入函数

注意请严格按照这种形式编写

// 按照size排序
bool cmpWithSize(const stone & stoneA, const stone & stoneB) {
    return stoneA.size < stoneB.size;
}


// 按照weight排序
bool cmpWithWeight(const stone & stoneA, const stone & stoneB) {
    return stoneA.weight < stoneB.weight;
}

石头工厂

随机生成numOfstone个石头,存入vector

vector<stone> stoneFactory(const int numOfStone) {
    // 创建vector存放stone
    vector<stone> v;
    
    // 将随机的stone加入vector中
    for (int i = 0; i < numOfStone; ++i) {
        // 随机生成大小与重量
        const int size = rand() % 50;
        const int weight = rand() % 50;
        // 添加stone
        v.push_back(stone(size, weight));
    }
    
    return v;
}

打印输出所有石头的信息

// 从前到后打印vector中的stone
void showStoneInVector(vector<stone> & v) {
    
    for (int i = 0; i < v.size(); ++i) {
        cout << "大小 : " << v[i].size << "    " << "重量 : " << v[i].weight << endl;
    }
    
}

主函数

1319行将自定义的排序规则函数名传入。

int main() {
    // 创建若干个随机stone,放入vector,并copy出另一份
    const int num = 5;
    vector<stone> v = stoneFactory(num);
    
    // 打印原始stone序列
    cout << "——————排序前——————" << endl;
    showStoneInVector(v);
    cout << endl << endl;
    
    // 按照size排序
    cout << "——————按照size排序后——————" << endl;
    sort(v.begin(), v.end(), cmpWithSize);
    showStoneInVector(v);
    
    // 按照weight排序
    cout << endl << endl;
    cout << "——————按照weight排序后——————" << endl;
    sort(v.begin(), v.end(), cmpWithWeight);
    showStoneInVector(v);
}

猜你喜欢

转载自blog.csdn.net/weixin_44344462/article/details/88308771