c++学习笔记(5)

本文介绍了C++中的unordered_set容器,其基于哈希表的特性,以及INT_MAX的含义。还详细讲解了std::pair的使用,包括模板类、构造函数、成员访问和比较操作。
摘要由CSDN通过智能技术生成

1.

unordered_set是C++标准库中的一个容器,它存储唯一元素的集合。与set不同,unordered_set不保证元素的顺序。它的底层实现是基于哈希表的,因此插入、删除和查找操作的时间复杂度为O(1)。

举一个简单的unordered_set使用示例:

#include <iostream>
#include <unordered_set>

int main() {
    std::unordered_set<int> my_set;

    // 插入元素
    my_set.insert(1);
    my_set.insert(2);
    my_set.insert(3);

    // 检查元素是否存在
    if (my_set.find(2) != my_set.end()) {
        std::cout << "2 is in the set" << std::endl;
    } else {
        std::cout << "2 is not in the set" << std::endl;
    }

    // 删除元素
    my_set.erase(2);

    // 遍历集合
    for (int x : my_set) {
        std::cout << x << std::endl;
    }
    return 0;
}

2. INT_MAX是C++标准库中定义的一个常量,表示int类型可以表示的最大值。在不同的编译器和平台上,这个值可能有所不同,但通常它的值为2147483647。

3.在C++中,abs是一个标准库函数,用于计算整数的绝对值。它接受一个整数参数,并返回该整数的非负值。

#include <iostream>
#include <cstdlib>  // 包含 abs 函数所需的头文件

int main() {
    int number = -10;
    int absoluteValue = abs(number);
    std::cout << "The absolute value of " << number << " is: " << absoluteValue << std::endl;
    return 0;
}

4.在C++中,std::pair是一个模板类,用于存储一对值。它被广泛用于各种标准库算法和容器,以及在自定义代码中作为一个简单的结构来存储两个相关联的值。std::pair提供了一种简洁的方式来处理键值对,而不需要定义一个完整的结构体或类。

std::pair的基本用法非常简单。要创建一个std::pair对象,你需要提供两个模板参数,这两个参数指定了`irst和second成员的类型

std::pair<int, std::string> p; // 一个包含int和string的pair

std::pair提供了几个构造函数:

- 默认构造函数,创建一个未初始化的`pair`对象。

- 接受两个参数的构造函数,用于初始化first和`second。

- 复制构造函数,用于从另一个pair对象复制。

- 移动构造函数,用于从另一个pair对象移动。

std::pair<int, std::string> p1; // 默认构造
std::pair<int, std::string> p2(10, "Hello"); // 初始化
std::pair<int, std::string> p3(p2); // 复制构造
std::pair<int, std::string> p4(std::move(p2)); // 移动构造

成员函数

std::pair没有专门的成员函数,但它继承了所有从std::pair基类继承的成员函数。这包括访问first和second成员的公开成员。

成员访问

first和second成员可以通过点操作符直接访问:

std::pair<int, std::string> p(10, "Hello");
int firstElement = p.first; // 访问first成员
std::string secondElement = p.second; // 访问second成员

比较操作

std::pair重载了比较操作符,允许你比较两个pair对象。比较首先基于first成员,如果first成员相等,则比较second成员。

std::pair<int, std::string> p1(10, "Hello");
std::pair<int, std::string> p2(10, "World");
if (p1 == p2) { // 比较两个pair对象是否相等
    // ...
}

std::pair通常用于以下场景:

- 作为函数返回多个值的结果。

- 在需要键值对的场景,例如映射(std::map)和集合(std::set)。

- 在需要存储两个相关数据项的地方,而不需要定义一个完整的结构体或类。

注意事项

- std::pair不保证first和second成员的特定顺序,它们只是命名约定。

- std::pair不支持数组风格的下标访问,因为first和second是数据成员,不是数组元素。

- std::pair不支持迭代器,因为它不是容器。

举一个简单的例子

#include <iostream>
#include <utility> // 包含pair的头文件

int main() {
    // 创建一个pair对象
    std::pair<int, std::string> p;
    // 初始化pair对象
    p = std::make_pair(10, "Hello");
    // 或者直接初始化
    std::pair<int, std::string> p2(20, "World");
    // 访问pair的成员
    std::cout << "First: " << p.first << ", Second: " << p.second << std::endl;
    // 比较两个pair对象
    if (p == p2) {
        std::cout << "Pairs are equal." << std::endl;
    } else {
        std::cout << "Pairs are not equal." << std::endl;
    }
    // 交换两个pair对象的值
    p.swap(p2);
    std::cout << "After swap:" << std::endl;
    std::cout << "First: " << p.first << ", Second: " << p.second << std::endl;
    std::cout << "First: " << p2.first << ", Second: " << p2.second << std::endl;
    return 0;
}

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值