使用迭代器c ++ [duplicate]删除向量中的重叠字符串

问题描述 投票:0回答:1

这个问题在这里已有答案:

我想删除存储在vector <-string>中的重叠字符串,仅显示一个元素。 我排序矢量字典顺序,它运作良好。 然后擦除,我使用下面的代码。

  for(auto iter = begin(vec); iter != end(vec); iter++) {
        auto frontIter = (iter + 1);

        if((*iter).compare(*frontIter) == 0) 
            vec.erase(iter);
    }

但它只擦除一个重叠元素。 如果我输入像a a(3个字符串)并且vector的所有元素都显示a(2个字符串) 我觉得部分vec.erase(iter);有些不对劲......

c++ string vector iterator
1个回答
1
投票

vector的元素放在set然后放回vector将删除所有重复。

set<string> s( vec.begin(), vec.end() );
vec.assign( s.begin(), s.end() );

如果有必要使用迭代器

set<string> s;
for(auto iter = begin(vec); iter != end(vec); iter++)
{
    s.insert(*iter);
}
vec.assign( s.begin(), s.end() );
© www.soinside.com 2019 - 2024. All rights reserved.