utility
<utility> 提供了一组基础工具类型和函数,常用于泛型编程和容器元素处理。
在 C++98 中,最常见的内容是 std::pair 和 std::make_pair。
头文件与主要内容
#include <utility>
常见条目:
| 名称 | 作用 |
|---|---|
std::pair<T1, T2> | 存储两个值的结构 |
std::make_pair(a, b) | 辅助创建 pair |
std::swap(a, b) | 交换两个对象 |
pair 基本用法
#include <iostream>
#include <string>
#include <utility>
int main() {
std::pair<std::string, int> student("Alice", 95);
std::cout << student.first << " : " << student.second << '\n';
return 0;
}
pair 的两个成员分别是 first 和 second。
make_pair
#include <iostream>
#include <string>
#include <utility>
int main() {
std::pair<std::string, int> p = std::make_pair(std::string("Bob"), 88);
std::cout << p.first << " -> " << p.second << '\n';
return 0;
}
make_pair 的优势是可以自动推导模板参数,代码更简洁。
在 map 插入中的典型应用
map::insert 返回 pair<iterator, bool>,并常结合 make_pair 使用:
#include <iostream>
#include <map>
#include <string>
#include <utility>
int main() {
std::map<std::string, int> scores;
std::pair<std::map<std::string, int>::iterator, bool> ret =
scores.insert(std::make_pair(std::string("Alice"), 100));
if (ret.second) {
std::cout << "insert success" << '\n';
} else {
std::cout << "already exists" << '\n';
}
return 0;
}
swap
#include <iostream>
#include <utility>
int main() {
int a = 10;
int b = 20;
std::swap(a, b);
std::cout << a << ' ' << b << '\n';
return 0;
}
swap 在很多算法和数据结构实现中都很常见。
使用注意
pair适合表达“天然二元组合”,例如键值、坐标、返回双值。- 当含义更复杂时,定义结构体通常更清晰。
pair支持比较运算,比较规则是先first再second的字典序。