std :: unique和vector :: resize

时间:2017-06-17 04:49:35

标签: c++ vector

unique和resize如何保持不重复:

for(map <string, vector<int> >::iterator it = m.begin(); it != m.end(); ++it)
    {
      vector<int>::iterator sz = unique((it->second).begin(),(it->second).end());
        (it->second).resize(distance((it->second).begin(),sz));
    }

矢量已排序。

1 个答案:

答案 0 :(得分:1)

所以基本上问题是关于阅读文档。

std::unique()将元素拉到向量的后面,并将迭代器返回到第一个非唯一元素。

在开始序列中可能看起来像:1 1 2 2 2 3 6 6

在对唯一性的调用之后,序列变为:1 2 3 6 ...(重复)。

<小时/> 然后distance()计算有多少独特元素,即从第一个唯一元素到第一个非唯一元素的距离。 .resize()只是切断了非独特的部分。

在这种情况下,

.erase(sz, (it->second).end);会更好用。循环本身也很奇怪。