c++ std::tuple举例,支持三元组或更多元素

std::tuple是C++11引入的一个类型,它可以存储任意数量和类型的值。与std::pair不同,std::tuple可以包含更多的元素,而不仅仅是两个。

std::map tuple举例

在std::map中,虽然每个元素不是一个三元组,但你可以使用std::tuple来模拟三元组或更多元组的行为。例如,以下代码展示了如何在std::map中存储学生的姓名、年龄和分数,并使用std::tuple来访问和操作这些信息:

#include <iostream>
#include <map>
#include <string>
#include <tuple>

int main() {
    std::map<std::string, std::tuple<int, double>> students = {
        {"John", {20, 85.5}},
        {"Alice", {19, 90.0}},
        {"Bob", {21, 80.0}}
    };

    // 访问 std::map 中的三元组
    for (const auto& [name, info] : students) {
        int age = std::get<0>(info);
        double score = std::get<1>(info);

        std::cout << "Name: " << name << ", Age: " << age << ", Score: " << score << std::endl;
    }

    // 修改 std::map 中的三元组
    students["John"] = {20, 95.0};

    // 使用 std::tuple 的比较函数来排序 std::map
    std::map<std::string, std::tuple<int, double>, std::greater<>> sorted_students(students.begin(), students.end(),
        [](const std::tuple<int, double>& a, const std::tuple<int, double>& b) {
            return std::get<1>(a) > std::get<1>(b);
        });

    // 访问排序后的 std::map
    for (const auto& [name, info] : sorted_students) {
        int age = std::get<0>(info);
        double score = std::get<1>(info);

        std::cout << "Name: " << name << ", Age: " << age << ", Score: " << score << std::endl;
    }

    return 0;
}

在上面的代码中,我们首先创建了一个std::map,其中每个元素的值是一个包含年龄和分数的std::tuple。然后,我们遍历这个映射,使用std::get<0>(info)和std::get<1>(info)来访问每个std::tuple中的年龄和分数。

接下来,我们创建了一个新的std::map,并使用std::greater<>作为比较函数对象来按照分数从高到低排序学生信息。注意,这里我们没有提供具体的比较函数,而是使用了std::greater<>来比较std::tuple中的第二个元素(即分数)。

最后,我们遍历排序后的映射,同样使用std::get<0>(info)和std::get<1>(info)来访问每个std::tuple中的年龄和分数。

总的来说,虽然std::map的每个元素不是一个真正的三元组,但你可以使用std::tuple来存储和访问多个值,并在需要时使用自定义比较函数来排序这些值。

std::vector tuple举例

下面是一个示例,展示了如何创建一个包含四元组(四个元素的元组)的 std::vector,并遍历这个向量,访问和处理每个四元组的元素。

#include <iostream>
#include <vector>
#include <tuple>

int main() {
    // 创建一个包含四元组的 std::vector
    std::vector<std::tuple<int, double, char, std::string>> vec = {
        std::make_tuple(1, 2.5, 'a', "Hello"),
        std::make_tuple(2, 3.6, 'b', "World"),
        std::make_tuple(3, 4.7, 'c', "C++")
    };

    // 遍历向量并访问每个四元组的元素
    for (const auto& tup : vec) {
        int i;
        double d;
        char c;
        std::string s;

        // 解包四元组
        std::tie(i, d, c, s) = tup;

        // 打印每个四元组的元素
        std::cout << "Tuple: (" << i << ", " << d << ", " << c << ", " << s << ")\n";
    }

    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值