C++ 删除字符串向量中的字符重复

C++ 删除字符串向量中的字符重复,c++,C++,我有一个文件名列表,如: { {1234}, {15}, {1264}, {78} } 例如,{1234}是四个名称的集合1、2、3和4 我需要一个字符串向量,其中只有一个元素,包括每个文件名的唯一匹配项:{{{12345678} 以下是我的方法(并不完全有效): 模板 void push_back_vec(std::vector&v,Args&&…Args) { (v.推回(args),…); } 向量g(向量a) { 矢量结果; 结果。推回(累加(a.begin(),a.end(),str

我有一个文件名列表,如:

{ {1234}, {15}, {1264}, {78} }
例如,
{1234}
是四个名称的集合
1
2
3
4

我需要一个字符串向量,其中只有一个元素,包括每个文件名的唯一匹配项:
{{{12345678}

以下是我的方法(并不完全有效):

模板
void push_back_vec(std::vector&v,Args&&…Args)
{
(v.推回(args),…);
}
向量g(向量a)
{
矢量结果;
结果。推回(累加(a.begin(),a.end(),string(“”));
排序(result.begin(),result.end());
result.erase(唯一(result.begin()、result.end()、result.end());
返回结果;
}

但是输出的元素既不是排序的,也不是唯一的:
126412347815
它是一个单一的数字126412347815(也是唯一的)

上述内容累积为一个字符串

使用以下代码从字符串中删除重复项

#include<iostream>
#include<numeric>
#include<algorithm>
#include<string>
#include<vector>
using namespace std;

template<typename T, typename... Args>
void push_back_vec(std::vector<T>& v, Args&&... args)
{
    (v.push_back(args), ...);
}

int main()
{

    vector<string>x;
    push_back_vec(x, "123", "452", "321");

    string a = accumulate(x.begin(), x.end(), string(""));

    sort(a.begin(), a.end());
    auto end = std::unique(a.begin(), a.end());
    a.erase(end,a.end());
    std::cout << std::string(a.begin(), end) << '\n';

}

Output

12345
Program ended with exit code: 0
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
模板
void push_back_vec(std::vector&v,Args&&…Args)
{
(v.推回(args),…);
}
int main()
{
维克托;
向后推向量(x,“123”,“452”,“321”);
字符串a=累加(x.begin(),x.end(),字符串(“”);
排序(a.begin(),a.end());
auto end=std::unique(a.begin(),a.end());
a、 擦除(end,a.end());

std::那我怎么才能去掉那些重复字符呢?正如我说的,我需要得到的是
12345678
。想想
result
的内容,然后
push_back
@raket1111:我想问题是
push_back
返回一个字符串,我需要消除它的重复字符,但问题是字符串在向量中。@Rakete1111:我甚至尝试将
result[0]
作为字符串,通过
result.erase(std::unique(result.begin(),result.end()),result.end()删除其重复项;
但结果仍然是错误的。它有什么问题?…您仍然在擦除并将
std::unique
应用于
结果
,而不是
result[0]
。实际上,只需使用
std::string result;
并排序+unique+擦除即可。
result.push_back(accumulate(a.begin(), a.end(), string("")));
#include<iostream>
#include<numeric>
#include<algorithm>
#include<string>
#include<vector>
using namespace std;

template<typename T, typename... Args>
void push_back_vec(std::vector<T>& v, Args&&... args)
{
    (v.push_back(args), ...);
}

int main()
{

    vector<string>x;
    push_back_vec(x, "123", "452", "321");

    string a = accumulate(x.begin(), x.end(), string(""));

    sort(a.begin(), a.end());
    auto end = std::unique(a.begin(), a.end());
    a.erase(end,a.end());
    std::cout << std::string(a.begin(), end) << '\n';

}

Output

12345
Program ended with exit code: 0