Skip to main content
Version: 1.0

utility

<utility> 提供了一组基础工具类型和函数,常用于泛型编程和容器元素处理。

在 C++98 中,最常见的内容是 std::pairstd::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 的两个成员分别是 firstsecond

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 在很多算法和数据结构实现中都很常见。

使用注意

  1. pair 适合表达“天然二元组合”,例如键值、坐标、返回双值。
  2. 当含义更复杂时,定义结构体通常更清晰。
  3. pair 支持比较运算,比较规则是先 firstsecond 的字典序。