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());