gpt4 book ai didi

c++ - 剔除 vector 中的重复条目

转载 作者:行者123 更新时间:2023-11-30 05:41:56 30 4
gpt4 key购买 nike

我有 vector ,我想检索一个包含所有条目的 vector ,这些条目在所有输入 vector 中的任何地方都不重复。

#include <vector>
int main() {

std::vector<int> a = {2, 1, 3};
std::vector<int> b = {99, 1, 3, 5, 4};
std::vector<int> c = {5, 6, 7, 1};

// magic to retrieve {2, 99, 4, 6, 7} (order doesn't matter)

}

是否有库函数可以帮助高效地执行此任务?

我并不局限于使用 vector 。该解决方案可以包括列表、集合或任何最适合该任务的内容。

最佳答案

使用unordered_map,O(N) 空间复杂度和O(N) 时间复杂度:

#include <vector>
#include <unordered_map>
#include <iostream>

std::vector<int>
get_unique_values(std::initializer_list<std::vector<int>> vectors)
{
std::unordered_map<int, size_t> tmp;
auto insert_value_in_tmp = [&tmp](int v) {
auto i = tmp.find(v);
if (i == tmp.end())
tmp[v] = 1;
else if (i->second != 2)
i->second = 2;
};

for ( auto& vec : vectors) {
for ( auto vec_value : vec ) {
insert_value_in_tmp(vec_value);
}
}

std::vector<int> result;
for (auto v : tmp) {
if (v.second == 1)
result.push_back(v.first);
}

return result;
};

int main() {

std::vector<int> a = {2, 1, 3};
std::vector<int> b = {99, 3, 5, 4};
std::vector<int> c = {5, 6, 7};

std::vector<int> result = get_unique_values({a,b,c});

for (auto v : result) {
std::cout << v << " ";
}
std::cout << '\n';

return 0;
}

关于c++ - 剔除 vector 中的重复条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30946301/

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