Given a vector
of unordered_map<u_int,int>
, I would like to check if the vector
contains any duplicated values. I know the comparison operator exists for unordered_maps
, but I would like to avoid the pairwise comparison of each element with each other. One classical solution is to insert the values of the vector
into a set
, then to compare the number of elements in the set
and the vector
. However, the problem here is that the object to be inserted into the set
must have the comparison operators overloaded. In case of the unordered_set
, the hash function to be used must be overloaded for the complex object. In order to overload, I need to derive a class from the std::unordered_map
. Then I need to overload either the comparison operator or the hash function. Another solution that I could think of is to concatenate all of the key value pairs into a string, then sort the string by the keys and detect the duplicates on those strings. I wonder what would be the best solution for this problem.
Example data:
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);
The contents of my_vec is:
{ { 1 => 1, 2 => 4, 3 => 5 },
{ 1 => 1, 2 => -1, 4 => -2 },
{ 1 => 1, 3 => 5 } }
Please feel free to ask/commend/edit if the question is not clear enough. Any help would be appreciated. Thank you in advance!
Aucun commentaire:
Enregistrer un commentaire