准确点讲,这道题不是我自己写出来,我先照着书上的代码敲了一遍,然后搞懂了思路: - 首先, 这道题最重要的是,应该想到:对每一个集合起一个特定的id,每一个集合应该是一个set<int>,其中的int是为了存储该集合中的每一个集合的id. - 然后应该设置一个map,用来将每一个集合更它相对应的id结合起来,即map<set<int>, int>,再就是用一个vector把这些每一个大的包含其他元素的集合的id结合起来。 所以就有三个结构。 还有就是对于设置id的实现,map中是没有重复的,用map的count方法去查找是否有集合,有的话就返回ID,没有的话加入一个新的id。 之后要对五个命令进行分析,dup和push,是两个简单操作,利用stack可以很简单的实现,union和insection和and这三个相对来讲复杂一点,但操作名称也给了一定的提示,可以想到algorithm头文件中的set_union和set_insection操作,这两个是对集合的操作。 先草草写这么多吧! ---------- 来自一个心比天高的傻子。