我有一堆数据充满重复项,我想消除重复项。你知道,例如[1,1,3,5,5,5,7]变成[1,3,5,7]。C++ std :: map或std :: set - 高效地插入重复项
它看起来像我可以使用std :: map或std :: set来处理这个。然而,我不确定(a)是简单地将所有值插入到容器中,还是(b)检查它们是否已经存在于容器中,并且只在插入时才插入 - 插入是否非常有效?即使有更好的方法......你能建议一个快速的方法来做到这一点吗?
另一个问题 - 如果我在其中存储的数据不像整数那样微不足道,而是一个自定义类,那么std :: map如何设法正确地存储(散列?)数据以便快速通过操作员[]访问?
'set'会更合适,因为您不需要每个元素的关联值。我猜测检查然后插入到集合中会比插入要慢,因为你必须在前者中进行两个关键查找。 – GWW
按照定义,在执行插入操作时,其中的任何一个都会为您*检查。即他们会用别的容器来做你想做的事情:检查是否存在。就我个人而言,除非你故意将某些东西映射到其他东西,否则我会与该集合一起使用。 – WhozCraig
数据是否总是排序?因为它看起来像你想[std :: unique](http://msdn.microsoft.com/en-us/library/9f5eztca(v = vs.100).aspx),而不是一个新的容器 –