在一个数组中删除重复的字符串

3
我是C++的新手,希望找到一种方法来从一个字符串数组中删除重复的字符串,该数组看起来像这样: string exempleArray[]= {"string1", "string2", "string1"}; 执行代码后,它应该看起来像这样: "string1", "string2", 但顺序并不重要。非常感谢您的时间。
2个回答

4

如果顺序不重要,您可以先使用 std::sort 对数组进行排序,然后使用 std::unique 来去除重复项。

std::sort(std::begin(exampleArray), std::end(exampleArray));
auto it = std::unique(std::begin(exampleArray), std::end(exampleArray));

这里,“it” 指向新的唯一元素范围的结尾之后。请注意,由于您使用了一个固定大小的数组,因此无法将其大小减小到唯一元素的数量。您需要将这些元素复制到可以在运行时确定大小的容器中。 std::vector<std:string> 是一个明显的选择。

std::vector<std::string> unique_strings(std::begin(exampleArray), it);

请注意,如果您使用的是std::vector<std::string>而不是固定大小的数组,您将能够避免复制并从原始向量中删除元素:

std::vector<std::string> strings = {"string1" "string2" "string1"};
std::sort(strings);
auto it = std::unique(std::begin(strings), std::end(strings));
strings.erase(it, strings.end());

你能避免使用 std::copy 吗?为什么不选择构造函数,如 std::vector<std::string> unique_strings{std::begin(exampleArray), it};?有特定的原因吗? - Nawaz
@Nawaz 当然,谢谢!那将是显而易见的方法。出于某种原因,我没有想到。 - juanchopanza

3

如果你想要这样的效果,建议使用std::set来存储数据。它可以自动去重。

如果你已经有了数组(或std::vector),但因某些原因无法使用std::set,那么可以先使用std::sort排序,然后再使用std::unique实现去重。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接