0

如何删除简单重复的字符串有很多问题:

关联

但我的问题与他们不同。

例如,如果我有条目vector<string>

{"111", "222", "222", "222", "333", "222"}

我需要得到以下结果:

{"111", "222", "333", "222"}

这意味着仅删除附近的重复值。

我目前的临时解决方案是创建另一个向量,从入口向量中复制每个元素,并检查该元素是否不等于第二个向量的最后一个元素。

4

1 回答 1

1

这是改编自std::unique页面的示例:

bool comp (std::string &i, std::string &j) {
  return (i==j);
}

int main () {
  std::string mys[] = {"111", "222", "222", "222", "333", "222"};       
  std::vector<std::string> myvector (mys,mys+6);
  myvector.erase(std::unique (myvector.begin(), myvector.end(), comp), myvector.end());  
  return 0;
}

以及原始代码的链接:

http://www.cplusplus.com/reference/algorithm/unique/

更新

正如评论中所建议的,您可以跳过比较器方法,但请记住,如果向量中的对象没有== ,您可以使用它。我只是放这个例子,因为它是 100% 完成的,它可以很容易地扩展到其他类型的对象。

更新 2

是的,你应该删除向量的最后一部分,因为正如文档所说,独特的方法将返回“一个迭代器到应该被认为是它的新过去元素的元素”

于 2013-10-28T08:58:14.723 回答