for (const auto& pair1 : factorPairs) { for (const auto& pair2 : factorPairs) { if (pair1.first != pair2.first && pair1.first != pair2.second && pair1.second != pair2.first && pair1.second != pair2.second) pairCount++;
时间: 2025-04-06 14:04:07 浏览: 21
### 嵌套循环逻辑与 `std::pair` 比较
在 C++ 中,嵌套循环通常用于处理多维数据结构或者需要双重迭代的情况。对于涉及 `std::pair` 的比较操作,可以利用其内置的字典序比较功能来判断两个 `std::pair` 是否相等、大于或小于。
#### 使用 `std::pair` 进行因子对计算
假设我们有一个函数 `factorPairs(int n)` 来找出整数 `n` 所有因数组合并存储在一个向量中:
```cpp
#include <iostream>
#include <vector>
#include <utility> // for std::pair
std::vector<std::pair<int, int>> factorPairs(int n) {
std::vector<std::pair<int, int>> result;
for (int i = 1; i * i <= n; ++i) { // 外层循环控制第一个乘数
if (n % i == 0) { // 如果能被整除,则找到一对因子
result.emplace_back(i, n / i); // 将这对因子存入结果容器
}
}
return result;
}
void printFactorPairs(const std::vector<std::pair<int, int>>& pairs) {
for (const auto& p : pairs) {
std::cout << "(" << p.first << ", " << p.second << ")" << std::endl;
}
}
```
上述代码展示了如何通过嵌套逻辑构建一个包含所有可能因子对的结果集。外层循环遍历潜在的第一个因子,而内部条件则验证该数值是否确实构成有效因子[^1]。
#### 关于 `std::pair` 的比较机制
当使用标准库中的 `<`, `<=`, `==`, etc., 对象时,`std::pair` 自动按照成员顺序依次对比 first 和 second 成员值。这意味着如果要检查两组 `(a,b)` 和 `(c,d)` 的关系,它会先看 a 和 c;仅当下两者相同才会继续考察 b 和 d 的大小差异[^2]。
例如,在寻找唯一性的场景下,这种特性非常有用——可以通过简单的排序加去重方法去除重复项:
```cpp
bool areUnique(const std::vector<std::pair<int,int>>& v){
if(v.empty()) return true;
std::sort(v.begin(),v.end());
for(size_t i=1;i<v.size();++i){
if( !(v[i]!=v[i-1]) )//这里利用operator!=隐含定义来做判定
return false;
}
return true;
}
```
此片段说明了即使没有显式的自定义比较器也可以依靠默认行为完成任务[^3]。
阅读全文
相关推荐



















