【问题标题】:Compare List/set elements比较列表/集合元素
【发布时间】:2010-06-09 01:43:29
【问题描述】:

我正在寻找比较两组并通过迭代第一组来显示第二组中缺失的元素。

我已经使用列表了,但它似乎是在无序列表上迭代以查找元素的开销。

#include <iostream>
#include <list>
using std::list;

bool isExist(list <int> &original, int i)
{
 list <int>::iterator iter;

 for (iter = original.begin(); iter != original.end(); iter++)
 {
  if (*iter == i) {
   original.splice(original.end(), original, iter);
   return true; }
 }
 return false;
}

void FindMissing(list <int> &original, list <int> &missing)
{
 int count_exist = 0;

 list <int>::iterator iter;

 for (iter = missing.begin(); iter != missing.end(); iter++)
 {if (isExist(original, *iter))
  count_exist++;}

 int count_missing = original.size() - count_exist;

 iter = original.begin();

 while(count_missing > 0)
 {
  std::cout << *iter++ << std::endl;
  count_missing--;
 }
}

int main()
{
 list <int> list_data_1;
 list <int> list_data_2;

 //Fill the list.
 for (int i = 0; i < 5; i++)
 list_data_1.push_back(i);

 //Fill second list with missing elements.
 list_data_2.push_back(3);
 list_data_2.push_back(1);
 list_data_2.push_back(4);

 FindMissing(list_data_1, list_data_2);
}

你会如何对 set 做同样的事情?

【问题讨论】:

    标签: c++ list set


    【解决方案1】:

    如果你有两套:

    std::set<int> s1;
    std::set<int> s2;
    

    如果你想得到一组元素在一个而不是另一个,你可以使用std::set_difference

    std::set<int> difference;
    std::set_difference(s1.begin(), s1.end(),
                        s2.begin(), s2.end(),
                        std::inserter(difference, difference.begin()));
    

    difference 将包含所有在s1 中但不在s2 中的元素。

    std::set_difference 适用于任何两个排序范围,因此您也可以将其与其他容器一起使用(例如,如果您的 std::lists 已排序,您可以在它们上使用 std::set_difference 来找出差异)。

    【讨论】:

    • 该死,打败我。很好的解释。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 2020-02-21
    • 2015-08-01
    • 2023-04-03
    • 1970-01-01
    • 2019-03-22
    • 2015-09-30
    相关资源
    最近更新 更多