c++ - 获取类型为 map<classId, set<studentId>> 的两个容器之间差异的最佳方法

标签 c++ stl

我有以下两个容器

map <classId, set< studentId> > allStudents;
map <classId, set< studentId> > assocStudents;

其中 assocStudents 是所有学生的子集。 获得 allStudents 减去 assocStudents 的差值以获得 unassocStudents 的最有效方法是什么?

map <classId, set< studentId> > unassocStudents;

我能想到的最好的是

  1. 遍历 allStudents 中的每个类(class),在 assocStudents 中搜索该 classId。
  2. 如果类(class)存在于assocStudents中,做一个studentId的set_difference;
  3. 否则复制整个 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/

相关文章:

c++ - 按类型检索可变参数类的给定成员

c++ - 迭代 map 并调用删除其他元素的函数是 map

c++ - 交换 const char* 和 std::string

c++ - STLSoft - 如何使用他们的文件系统功能?

c++ - 使用可变参数模板以更多参数概括 STL 算法

c++ - std::function 如何使指向成员函数的指针起作用?

c++ - RegOpenKeyEx 返回 ERROR_SUCCESS 但 RegSetValueEx 总是返回 ERROR_ACCESS_DENIED

c++ - 游戏中的射击按钮在按下空格键时触发多次而不是一次

c++ - mingw-w64 和 SDL2 链接问题

c++ - 集: C++ vs C#的快速交集