gpt4 book ai didi

c++ - 从 3 个 vector 中删除重复项

转载 作者:行者123 更新时间:2023-11-30 03:13:26 24 4
gpt4 key购买 nike

我在 C++ 中遇到了问题。假设我有 3 个 vector (不要介意定义错误,只是一个例子)

a = {"a", "b"}, b = {"b", "c"}, c = {"b", "c"}

我怎样才能最快速有效地从中删除所有重复项,所以结果如下。一个 vector 中没有重复项,并且 vector 未按字母顺序排序。

a = {"a"}, b = {}, c = {}

编辑:我试过这个:

for (int i = 0; i < a.size(); i++)
{
int i1 = findIndex(b, a[i]);
int i2 = findIndex(c, a[i]);
if (i1 != -1)
{
a.erase(a.begin() + i);
b.erase(b.begin() + i1);
}

if (i2 != -1)
{
a.erase(a.begin() + i);
c.erase(b.begin() + i2);
}
}

findIndex 在哪里:

int findIndex(vector<string> vec, string s)
{
for (int i = 0; i < vec.size(); i++)
{
if (vec[i] == s)
{
return i;
}
}

return -1;
}

最佳答案

#include <unordered_map>
#include <vector>
#include <algorithm>
#include <string>

void RemoveDuplicates(std::vector<std::vector<std::string>> &vectors)
{
std::unordered_map<std::string, int> count;

for (auto& vec : vectors)
{
for (auto str : vec)
{
count[str]++;
}
}


for (auto& vec : vectors)
{
auto it = std::remove_if(vec.begin(), vec.end(),
[&count](const std::string& str) { return count[str] > 1; });
vec.erase(it, vec.end());
}
}

int main()
{
std::vector<std::vector<std::string>> myvectors = { {"a", "b"}, { "b", "c" }, { "b", "c" } };
RemoveDuplicates(myvectors);

return 0;
}

关于c++ - 从 3 个 vector 中删除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58712613/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com