我有这张地图:
std::map<std::set<int>, float> myMap;
和myMap
初始化为:
{ (7, 9), 0.63 }
{ (7, 11), 0.66 }
{ (7, 13), 0.72 }
{ (7, 16), 0.73 }
{ (7, 17), 0.67 }
{ (9, 13), 0.63 }
{ (9, 16), 0.65 }
{ (9, 18), 0.61 }
我想比较这些集合,例如,如果集合A(i1,i2,... in-1)等于集合B(j1,j2,... jn-1),使得i1 = j1, i2 = j2,..... in-1 = jn-1,然后:
我将创建新的集合C(i1,i2,..... in,jn)
所以在第一次迭代后我会有这些集合:
(7,9,11),(7,9,13),(7,9,16),(7,9,17),(7,11,13),(7,11,16) ,(7,11,17),(7,13,16),(7,13,17),(7,16,17)
(9,13,16),(9,13,18),(9,16,18)
和在第二次迭代后,我将拥有这些集:
(7,9,11,13),(7,9,11,16),(7,9,11,17),(7,9,13,16),(7,9,13, 17),(7,9,16,17)
(9,13,16,18)**停止,不再设置!! **
和在第三次迭代后,我将拥有这些集合: (7,9,11,13,16),(7,9,11,13,17),(7,9,13,16,17),(7,9,13,16,17)**停止,没有更多的设置!! **
要实施上述示例,我想使用set_differenc
和set_union
以开头,我编写了比较两个向量的简单代码:
vector<int> a{ 1, 2, 3, 4, 5, 6, 7};
vector<int> b{ 1, 2, 3, 4, 5, 6, 8 };
set<int> dest1;
set<int> diff;
set<int> A(a.begin(), a.begin() + 6);
set<int > B(b.begin(), b.begin()+ 6);
std::set_difference(A.begin(), A.end(), B.begin(), B.end(),
std::inserter(diff, diff.begin()));
if (diff.size()==0)
{
std::set_union(a.begin(), a.end(), b.begin(), b.end(), std::inserter(dest1, dest1.begin()));
}
for (set<int> ::iterator it = dest1.begin(); it != dest1.end(); it++)
cout << *it << " ";
cout << endl;
我将a
和b
定义为向量,因为我想要比较a
中的所有元素,b
期望最后一个元素
我的问题如果a
和b
设置不是向量,我怎样才能执行相同的代码,因为我想在上面的示例中应用这个简单的代码,上面示例中的myMap
定义为std::map<std::set<int>, float> myMap;
答案 0 :(得分:1)
那么std::equal
中有一个标准函数#include <algorithm>
。它应该像以下一样简单:
#include <algorithm>
set<int> s1{1, 2, 3, 4};
set<int> s2{1, 2, 3, 5};
bool equal = std::equal(s1.begin(), --(s1.end()), s2.begin());