迭代集联合的干净方法?

大风球

我有2个std :: set实例,例如,一个实例对应于时间t处集合的状态,另一个实例对应于t + 1处。

我想遍历这两个集合的联合(在数学意义上),使得:

  • 联合的每个元素都要处理一次
  • 对于每个元素,我都可以在恒定时间内告诉它是在第一组,第二组还是两者中

这是我目前正在做的一个例子:

std::set<A> old_set, new_set;
for(auto it = old_set.begin(); it != old_set.end(); ++it) {
        if(new_set.count(*it) == 0) {
            //only in old set but not in new set
        }
    }

for(auto it = new_set.begin(); it != new_set.end(); ++it) {
    if(old_set.count(*it) == 0) {
        //only in new set but not in old set
    }
}

如您所见,它缺少我们处理两个集合中的元素的部分,而且复杂性还不够好。我认为应该有一种方法可以通过简单地迭代集合中的所有元素来做我想做的事情

有人有主意吗?

谢谢

贾罗德42

您可以执行以下操作:

template <typename T, typename D>
void iterate(std::set<T>& s1, std::set<T>& s2, D d)
{
    auto it1 = s1.begin();
    auto it2 = s2.begin();

    while (it1 != s1.end() && it2 != s2.end()) {
        if (*it1 < *it2) {
            // only in set1
            d.visit1(*it1);
            ++it1;
        } else if (*it2 < *it1) {
            // only in set2
            d.visit2(*it2);
            ++it2;
        } else {
            // in both
            d.visitboth(*it1, *it2);
            ++it1;
            ++it2;
        }
    }
    for (; it1 != s1.end(); ++it1) {
        // only in set1
        d.visit1(*it1);
    }
    for (; it2 != s2.end(); ++it2) {
        // only in set2
        d.visit2(*it2);
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

遍历集合联合的干净方法?

来自分类Dev

联合查找方法性能,迭代与递归

来自分类Dev

在C ++中迭代2D容器的最干净方法

来自分类Dev

Postgresql:使用不同的参数多次重复查询-比联合体更干净的方法?

来自分类Dev

什么是迭代嵌套对象集合的更干净或更有效的方法

来自分类Dev

清除Logstash的干净方法

来自分类Dev

用迭代方法计算最大相互独立的节点集

来自分类Dev

是否可以迭代Elm中的联合类型?

来自分类Dev

如何迭代整数对列表,计算新的“联合对”

来自分类Dev

迭代与通过联合创建的范围

来自分类Dev

Arcobjects联合方法

来自分类Dev

迭代以产生集合的并集

来自分类Dev

合并对象的最干净方法

来自分类Dev

构建JavaScript对象的干净方法

来自分类Dev

尊重DRY条件的干净方法

来自分类Dev

编写此查询的干净方法

来自分类Dev

解析JSON对象的干净方法

来自分类Dev

避免使用索引使迭代器无效,并保持干净的接口

来自分类Dev

如何干净地迭代数组 PHP

来自分类Dev

是否有一种干净的方法可以仅在第一次迭代时或在执行之前检查循环中的变量?

来自分类Dev

无法轻松地迭代联合类型的共享数组属性

来自分类Dev

以联合作为方法参数

来自分类Dev

可迭代的Python集更新

来自分类Dev

JavaScript迭代多个嵌套集

来自分类Dev

迭代数据集表

来自分类Dev

有没有一种干净的方法可以将重载集转换为适合与std :: visit一起使用的访问者?

来自分类Dev

有没有一种干净的方法可以将重载集转换为适合与std :: visit一起使用的访问者?

来自分类Dev

检查是否为空的更干净方法

来自分类Dev

使用HTML SVG元素的更干净的方法?

Related 相关文章

热门标签

归档