C ++如何比较set <int>从begin到last element -1 </int>

时间:2014-07-10 04:39:59

标签: c++

我有这张地图:

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_differencset_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;

我将ab定义为向量,因为我想要比较a中的所有元素,b 期望最后一个元素

我的问题如果ab设置不是向量,我怎样才能执行相同的代码,因为我想在上面的示例中应用这个简单的代码,上面示例中的myMap定义为std::map<std::set<int>, float> myMap;

1 个答案:

答案 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());
相关问题