简化向量以仅具有唯一元素

时间:2015-06-30 18:15:12

标签: c++ vector

我正在尝试创建一个程序,只保留向量中的唯一元素

例如:

vector<string> i = "one", "one", "two".
输出将是:

vector<string> i = "one", "two"

****这是作为函数的答案的实现。当我使用样本向量运行时,我得到错误向量迭代器不兼容。

void simplifyVector(vector<string> i){

    /*vector<string>*/;

    sort(i.begin(), i.end());

    auto iter = unique(i.begin(), i.end());

    while (iter != i.end())
    {
        i.erase(iter);
    }

    for (const auto &s : i)
    {
        cout << s << " ";
    }
    cout << endl;

}

1 个答案:

答案 0 :(得分:0)

使用sort和unique。使用sort来但是彼此相邻的所有重复值除了unique之外,将所有相互相邻的值放在最后并返回指向第一个重复元素的迭代器。然后我们使用while循环来删除这些元素。请记住,通用算法永远不会删除容器中的元素。

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>

int main()
{
    std::vector<std::string> i = {"one", "one", "two"};

    std::sort(i.begin(), i.end());

    auto iter = std::unique(i.begin(), i.end());

    erase(iter, i.end());

    for (const auto &s : i)
    {
        std::cout << s << " ";
    }
    std::cout << std::endl;

    return 0;
}