You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++ ordered set以pair为键时的默认排序规则是什么?

C++ std::set中pair类型键的默认排序逻辑

嘿,这个问题问得很准!刚好我对std::set(你说的"ordered set"应该指的是这个——毕竟C++标准库的std::ordered_set是哈希集合,本身是无序的,而有序的排序容器是std::set)的pair键排序逻辑很熟悉,给你拆解清楚:

首先明确:std::set默认使用std::less<T>作为比较器,而C++标准库已经为std::pair<U, V>特化了std::less模板,它的排序规则是:

  • 优先比较pair的第一个元素:如果两个pair的第一个元素不相等,直接根据第一个元素的<比较结果确定顺序;
  • 当第一个元素相等时,才会比较第二个元素,同样用<运算符判断顺序。

完全符合你的猜想!拿你举的例子来说,(1,1)和(1,2)的第一个元素都是1,相等,所以会对比第二个元素——1 < 2,所以(1,1)会排在(1,2)的前面。

给你贴一段测试代码验证一下:

#include <iostream>
#include <set>
#include <utility>

int main() {
    std::set<std::pair<int, int>> ordered_set;
    ordered_set.insert(std::make_pair(1, 2));
    ordered_set.insert(std::make_pair(1, 1));
    ordered_set.insert(std::make_pair(2, 0));
    ordered_set.insert(std::make_pair(0, 5));

    // 遍历输出排序后的结果
    for (const auto& elem : ordered_set) {
        std::cout << "(" << elem.first << ", " << elem.second << ")\n";
    }
    return 0;
}

这段代码的输出会是:

(0, 5)
(1, 1)
(1, 2)
(2, 0)

另外提个小细节:如果你真的指的是std::ordered_set(哈希无序集合),那它默认不支持pair作为键,因为标准库没有为pair提供默认的哈希函数,这时候你需要自定义哈希器才行,但结合你问的排序逻辑,应该是指有序的std::set,所以上面的解释完全适用。

内容的提问来源于stack exchange,提问作者Rajdeep

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:29:21