gpt4 book ai didi

c++ - 如何检测 unordered_map vector 中的重复项?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:38:10 24 4
gpt4 key购买 nike

给定一个 vectorunordered_map<u_int,int> ,我想检查一下 vector包含任何重复值。如果两个 unordered_maps 的所有键和对应的值都相等,则认为它们是重复的。我知道 unordered_maps 存在比较运算符,但我想避免每个元素相互之间的成对比较。一种经典的解决方案是插入 vector 的值。进入 set , 然后比较 set 中的元素个数和 vector .然而,这里的问题是对象要插入到set中。必须重载比较运算符。如果是 unordered_set , 必须为复杂对象重载要使用的散列函数。为了重载,我需要从 std::unordered_map 派生一个类.然后我需要重载比较运算符或哈希函数。我能想到的另一个解决方案是将所有键值对连接成一个字符串,然后按键对字符串进行排序并检测这些字符串上的重复项。我想知道这个问题的最佳解决方案是什么。
示例数据:

using namespace std;
typedef unordered_map<u_int,int> int_map;
int_map a = { {1,1}, {2,4}, {3,5} };
int_map b = { {1,1}, {2,-1}, {4,-2} };
int_map c = { {1,1}, {3,5} };

vector<unordered_map<u_int,int>> my_vec;

my_vec.push_back(a);
my_vec.push_back(b);
my_vec.push_back(c);

my_vec的内容是:

 { { 1 => 1, 2 => 4, 3 => 5 }, 
{ 1 => 1, 2 => -1, 4 => -2 },
{ 1 => 1, 3 => 5 } }

如果问题不够清楚,请随时提问/建议/编辑。任何帮助,将不胜感激。提前致谢!

最佳答案

你可以像下面这样:

typedef unordered_map<u_int,int> int_map;

struct my_map_comparator
{
bool operator()(const int_map& a, const int_map& b)
{
a_hash = compute_hash_for_a(all keys of a)
b_hash = compute_hash_for_b(all keys of b)

return a_hash == b_hash;
}
};

std::unordered_set<int_map,std::hash<int_map>, my_map_comparator> map_list();

关于c++ - 如何检测 unordered_map vector 中的重复项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51964419/

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