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;
}