我有以下两个容器
map <classId, set< studentId> > allStudents;
map <classId, set< studentId> > assocStudents;
其中 assocStudents 是所有学生的子集。 获得 allStudents 减去 assocStudents 的差值以获得 unassocStudents 的最有效方法是什么?
map <classId, set< studentId> > unassocStudents;
我能想到的最好的是
- 遍历 allStudents 中的每个类(class),在 assocStudents 中搜索该 classId。
- 如果类(class)存在于assocStudents中,做一个studentId的set_difference;
- 否则复制整个 studentId 集。
有没有更聪明的方法来做到这一点?
编辑:
我对提供的答案有点迷茫。
假设我有以下数据
allStudents contains classId 1, studentId {1, 11, 111, 1111}
classId 2, studentId (2, 22, 222, 2222}
assocStudents contains classId 2, studentId {22, 2222}
我喜欢最后的容器
unassocStudents contains classId 1, studentId {1, 11, 111, 1111}
classId 2, studentId (2, 222}
set_difference 不会给我以下信息
unassocStudents contains classId 1, studentId {1, 11, 111, 1111}
最佳答案
只需使用 std::set_difference
#include <iterator>
std::set_difference(allStudents.begin(), allStudents.end(),
assocStudents.begin(), assocStudents.end(),
std::inserter(unassocStudents, unassocStudents.end()));
关于c++ - 获取类型为 map<classId, set<studentId>> 的两个容器之间差异的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20370792/