我想比较两组,并通过迭代第一组显示第二组中缺少的元素。
我已经完成了使用列表,但它似乎是在无序列表上进行迭代迭代以找到元素。
#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);
}
你如何对集合做同样的事?
答案 0 :(得分:9)
如果你有两套:
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::list
已经排序,则可以对它们使用std::set_difference
找到差异)。