C++ 如何将循环中的两个集合作为if条件进行比较

C++ 如何将循环中的两个集合作为if条件进行比较,c++,C++,我有两套。我想从第一个集合中选择一个元素,并将其与第二个集合中的所有元素进行比较,如果它不等于其中的非,请做一些事情!我应该对firs集合中的所有元素重复它!我尝试了以下代码: int main() { set<int> Y; set<int> X; for (auto iter = Y.begin(); iter != Y.end(); iter++) { for (auto iter1 = X.begin(); iter1 != X.end(); iter1

我有两套。我想从第一个集合中选择一个元素,并将其与第二个集合中的所有元素进行比较,如果它不等于其中的非,请做一些事情!我应该对firs集合中的所有元素重复它!我尝试了以下代码:

int main() {
set<int> Y;
set<int> X;
for (auto iter = Y.begin(); iter != Y.end(); iter++) {

    for (auto iter1 = X.begin(); iter1 != X.end(); iter1++) {

        if (*iter != *iter1) {
            B[*iter1 - 1] = 1;
        }
    }
    return 0;
}
intmain(){
设置Y;
集合X;
对于(自动iter=Y.begin();iter!=Y.end();iter++){
对于(自动iter1=X.begin();iter1!=X.end();iter1++){
如果(*iter!=*iter1){
B[*iter1-1]=1;
}
}
返回0;
}

但是它没有给我正确的答案!我认为我没有以正确的方式编写if条件!

您实现的if条件只是检查第二个集合中的任何元素的条件是否失败,从而采取行动。但是,根据您的描述,您希望它检查与第二个集合中所有元素的比较在你采取行动之前:

for (auto iter=set1.begin(); ...) {
  bool equal_toany = False;
  for (auto iter1=set2.begin(); ...) {
     if (*iter == *iter1) {
        equal_toany = True;
        break;
     }
   }
   if (!equal_toany) {
     dostuff() // B[*iter -1] =1
   }
}
我有两个集合。我想从第一个集合中选择一个元素,并将其与第二个集合中的所有元素进行比较,如果它不等于其中的非,请做一些事情

您正在寻找的是被调用的(当然,只要您的容器已排序并且
std::set
是一个已排序的容器)

只要去掉循环,调用上面的函数,找到第一个集合中的元素和第二个集合中的元素,然后迭代它们。
在几乎所有现实世界的情况下,复杂性都应该低于您的方法(您最多有
2(N+M-1)
比较和固定数量的
N*M
比较,其中
N
是第一组的大小,
M
是第二组的大小)。
缺点是需要分配内存来存储元素以进行迭代。如果这是一个主要取决于实际问题的价格,则很难说。

用于判断值是否是集合的成员:

for (auto iter = Y.begin(); iter != Y.end(); iter++) {
    if (X.find(*iter) != X.end())
        B[*iter1 - 1] = 1;
    }
}

什么是
B
?请提供a.您期望的结果是什么?这与您实际得到的结果有何不同?您的问题中没有足够的信息来有意义地回答它。您可能在寻找吗?使用感谢您的时间如何?您能告诉我第一个列表中的第一个元素是否不等于否吗在第二个元素的n中,我可以写入B[*iter]=1,B是一个数组,由skypjack的回答。std lib还为这个任务提供了方便的函数“std::set_difference”。不过,看看如何使用嵌套for循环进行解析可能还是有启发性的