gla*_*kou 2 c++ map set set-difference
我想问一下是否可以提供一个示例,说明如何使用set_difference找到地图的集合和键之间的差异
我知道另一个问题std :: set_difference是否可以比较set和map Keys?但它指出另一个没有明确例子的问题.我需要一个不使用boost库的解决方案
#include <algorithm>
#include <set>
#include <iterator>
// ...
std::set<int> s1, s2;
// Fill in s1 and s2 with values
std::set<int> result;
std::set_difference(s1.begin(), s1.end(), s2.begin(), s2.end(),
std::inserter(result, result.end()));
Run Code Online (Sandbox Code Playgroud)
您可以使用自定义比较器来完成.标准算法使用严格的弱排序.为了测试两个元素的相等性,比较器需要应用两次.两个元素相等时都comp(first, second)和comp(second, first)返回false(其中comp是比较器功能).由于您要比较的元素具有不同的类型,因此一个比较器不会 - 您需要两个重载:
struct cmp {
bool operator()(int i, const std::pair<int, double>& p) const
{
return i < p.first;
}
bool operator()(const std::pair<int, double>& p, int i) const
{
return p.first < i;
}
};
int main()
{
std::set<int> s1 { 1, 2, 3, 4 };
std::map<int, double> s2 { {1, 0}, {2,0}, {4,0} };
std::set<int> result;
std::set_difference(s1.begin(), s1.end(), s2.begin(), s2.end(),
std::inserter(result, result.end()), cmp());
std::cout << *result.begin(); // will print 3
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4049 次 |
| 最近记录: |