gpt4 book ai didi

c++ - 查找集合键和映射键之间的 set_difference

转载 作者:搜寻专家 更新时间:2023-10-30 23:59:37 26 4
gpt4 key购买 nike

我想问一下是否可以提供一个示例,说明如何使用 set_difference 找出 map 的集合和键之间的区别

我知道另一个问题std::set_difference is it possible to compare set and 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()));

最佳答案

您可以使用自定义比较器来完成。标准算法使用严格的弱排序。要测试两个元素是否相等,需要应用两次比较器。当 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

}

关于c++ - 查找集合键和映射键之间的 set_difference,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15579623/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com