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

如何同时遍历两个std::set并完成指定的激活/去激活操作?

实现思路与代码

因为std::set是有序容器,但不支持随机访问(不能像向量那样用[]下标访问元素),所以我们可以用迭代器来模拟双指针的遍历逻辑,和你写的排序向量版本逻辑完全一致,只是把下标操作换成迭代器的移动。

具体实现代码

#include <set>

// 假设存在activate和deactivate函数,接收int类型的索引
void activate(int idx);
void deactivate(int idx);

void processSets(std::set<int>& one, std::set<int>& two) {
    auto it1 = one.begin();
    auto it2 = two.begin();

    while (it1 != one.end() && it2 != two.end()) {
        if (*it1 < *it2) {
            // 仅存在于one中的元素,执行去激活
            deactivate(*it1);
            ++it1;
        } else if (*it1 == *it2) {
            // 同时存在于两个集合,保持原有状态
            ++it1;
            ++it2;
        } else {
            // 仅存在于two中的元素,执行激活
            activate(*it2);
            ++it2;
        }
    }

    // 处理one中剩余的元素(均只存在于one中)
    while (it1 != one.end()) {
        deactivate(*it1);
        ++it1;
    }

    // 处理two中剩余的元素(均只存在于two中)
    while (it2 != two.end()) {
        activate(*it2);
        ++it2;
    }
}

逻辑验证(对应你的示例)

  • 输入集合:
    • one = {1,3,5,6,7,8,10}
    • two = {2,4,6,8,10,12}
  • 执行后最终激活状态:2,4,6,8,10,12,完全符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 19:40:26