gpt4 book ai didi

c++ - 在 std::vector> 上使用 std::unique()

转载 作者:搜寻专家 更新时间:2023-10-31 02:15:15 27 4
gpt4 key购买 nike

这是我的问题:我有一个 std::vector<std::unordered_set<int>> .其中一些无序集是相等的,但顺序不同(我知道 unordered_set 中的顺序不明确)。要删除重复项(在集合的数学意义上,例如 {1,3,2} == {3,2,1})我考虑过使用 std::unique() ,但这不起作用。搜索后我什至注意到 vector 中的数据需要排序,这在这种情况下没有意义。是否有删除 std::vector<std::unordered_set<int>> 中重复项的函数? ?我可以自己做 我只是想知道我是否错过了 STL 中的某些内容。另外,如果您知道如何使用不同的容器解决此问题,请告诉我。效率在这里不是大问题,在这种情况下,该 vector 中的元素不超过 200 个。

TLDR;如何删除 std::vector<std::unordered_set<int>> 中的重复项?

最佳答案

Efficiency is not an big issue here

那我们开始吧! setoperator<定义,所以让我们即时构建它们吧!

std::vector<std::unordered_set<int>> v = ...;
std::sort(v.begin(), v.end(), [](auto const& lhs, auto const& rhs){
return std::set<int>(lhs.begin(), lhs.end()) <
std::set<int>(rhs.begin(), rhs.end());
});
v.erase(std::unique(v.begin(), v.end()), v.end());

就运行时而言,这当然很糟糕,但它确实有效!


或者你可以制作一个 unordered_set<unordered_set<int>>并想出一个独立于排序的散列,这样你就不必一开始就做这些事情。

关于c++ - 在 std::vector<std::unordered_set<T>> 上使用 std::unique(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38768836/

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