底层数据结构

极简单的二元组结构体,仅含两个公开成员 firstsecond。严格来说不是容器(无 size/empty/迭代器),但它是 mapunordered_map 等键值对容器的元素类型,是所有关联容器的基础组件。

复杂度

操作复杂度说明
构造O(1)两个成员的直接初始化
拷贝/移动O(1)
== / !=O(1)比较 first,再比较 second
< / > / <= / >=O(1)字典序比较

关键方法 / 特性

特性说明
p.first第一个元素(在 map 语境中充当 key)
p.second第二个元素(在 map 语境中充当 value)
make_pair(a, b)工厂函数创建 pair
pair{a, b}C++11 初始化列表
pair(a, b)C++17 CTAD 自动推导
auto [x, y] = pC++17 结构化绑定
== / != / < / > / <= / >=全六个比较运算符,字典序

伪代码示例

// 创建
p1 = pair<string, int>("apple", 5)
p2 = make_pair("banana", 3)
p3 = pair<string, int>{"cherry", 7}

// 访问
print p1.first          // "apple"
print p1.second         // 5

// 结构化绑定
auto [name, count] = p1
print name, count

// 比较(字典序:先比 first,相等再比 second)
a = pair<int, int>{1, 5}
b = pair<int, int>{1, 3}
print a < b             // false(1==1, 5>3 所以 a > b)

// 函数返回多值
function minmax(arr):
    return pair<int, int>(min_val, max_val)
auto [lo, hi] = minmax(vec)

// map insert 返回值
auto [it, ok] = mp.insert({"key", value})
if not ok:
    print "key already exists, value: " + it.second

// 在 priority_queue 中存优先级
priority_queue<pair<int, string>> pq
pq.push({3, "taskA"})
pq.push({1, "taskB"})       // 1 < 3,默认大根堆中 taskB 优先级更高

相关链接