差分搜索两个STL向量的最佳实践解决方案

时间:2011-03-25 11:57:01

标签: c++ stl

我已经有两个STL向量。例如:

vector<int> MyList;
MyList.push_back(10);
MyList.push_back(20);
MyList.push_back(30);
MyList.push_back(40);
MyList.push_back(50);

vector<int> MyListSub;  
MyListSub.push_back(20);
MyListSub.push_back(30);
MyListSub.push_back(40);

我想获取MyListSub中的元素数量,而不是MyList中的元素数量。 对于此实例,结果为“2”

1 个答案:

答案 0 :(得分:4)

您可以使用std::set_difference

std::vector<int> diff;
std::set_difference(MyList.begin(), MyList.end(),
                    MyListSub.begin(), MyListSub.end(),
                    std::back_inserter(diff));

正如@Jan指出的那样,向量必须进行排序。如果不是,请使用std::sort对其进行排序:

std::sort(MyList.begin(), MyList.end());

或者,您可以考虑首先将元素存储在std::set中,这样就可以对它们进行排序。