首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C++按数值对tuple<string、float>的向量进行排序,然后按字典顺序排序

在C++中,可以使用std::sort算法对tuple<string, float>的向量进行排序。首先,我们需要定义一个比较函数,该函数将首先按照数值进行排序,然后按照字典顺序进行排序。

代码语言:txt
复制
#include <iostream>
#include <vector>
#include <tuple>
#include <algorithm>

bool compare(const std::tuple<std::string, float>& a, const std::tuple<std::string, float>& b) {
    // 按照数值进行排序
    if (std::get<1>(a) < std::get<1>(b)) {
        return true;
    }
    else if (std::get<1>(a) > std::get<1>(b)) {
        return false;
    }
    
    // 数值相等时,按照字典顺序进行排序
    return std::get<0>(a) < std::get<0>(b);
}

int main() {
    std::vector<std::tuple<std::string, float>> vec = { {"apple", 3.5}, {"banana", 2.0}, {"orange", 3.5}, {"grape", 2.5} };
    
    std::sort(vec.begin(), vec.end(), compare);
    
    for (const auto& item : vec) {
        std::cout << std::get<0>(item) << " " << std::get<1>(item) << std::endl;
    }
    
    return 0;
}

上述代码中,我们定义了一个名为compare的比较函数,该函数接受两个tuple<string, float>类型的参数ab。首先,我们通过std::get<1>(a)std::get<1>(b)分别获取到两个tuple中的数值部分,然后进行比较。如果a的数值小于b的数值,我们返回true,表示a应该排在b之前;如果a的数值大于b的数值,我们返回false,表示a应该排在b之后。如果两个数值相等,我们再通过std::get<0>(a)std::get<0>(b)获取到两个tuple中的字符串部分,然后进行字典顺序的比较,返回比较结果。

main函数中,我们创建了一个vector,其中包含了四个tuple<string, float>元素。然后,我们使用std::sort算法对该向量进行排序,传入我们定义的比较函数compare作为排序的依据。最后,我们遍历排序后的向量,并输出每个元素的字符串和数值部分。

这样,我们就可以按照数值和字典顺序对tuple<string, float>的向量进行排序了。

腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券