Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;如何比较集合<;int>;从开始到最后一个元素-1_C++ - Fatal编程技术网

C++ C++;如何比较集合<;int>;从开始到最后一个元素-1

C++ C++;如何比较集合<;int>;从开始到最后一个元素-1,c++,C++,我有这张地图: std::map<std::set<int>, float> myMap; 我想比较这些集合,例如,如果集合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,

我有这张地图:

std::map<std::set<int>, float> myMap;
我想比较这些集合,例如,如果集合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\u differic
set\u 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{1,2,3,4,5,6,7};
向量b{1,2,3,4,5,6,8};
设置dest1;
设置差异;
设置A(A.begin(),A.begin()+6);
设置B(B.begin(),B.begin()+6);
设置差异(A.开始(),A.结束(),B.开始(),B.结束(),
插入器(diff,diff.begin());
如果(差异大小()==0)
{
std::set_union(a.begin()、a.end()、b.begin()、b.end()、std::inserter(dest1、dest1.begin());
}
for(set::iterator it=dest1.begin();it!=dest1.end();it++)

#include
中有一个标准函数
std::equal
。它应该简单到:

#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());
#包括
集合s1{1,2,3,4};
集s2{1,2,3,5};
bool equal=std::equal(s1.begin(),--(s1.end()),s2.begin());

你真的在问你的算法中对集合进行运算的部分,对吗?地图与这个问题无关?我建议你把地图从这个问题中移除,使它更加集中和清晰。
#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());