У меня есть пары данных, ключ и значение в двух разных коллекциях.Мне нужно сравнить значения обеих коллекций и создать коллекцию, содержащую пары ключей для значений, которые равны.
Например, со следующим набором данных:
Vals
Key Col1 Col2
1 4 5
2 6 9
4 8 4
6 10 10
общие значения будут 4 и 10. Поэтому он в этом случае получает новую коллекцию с парами (ключ col1, ключ col2) {{1, 4}, {6, 6}}
Мне нужен самый быстрый способ сделать это, каждая коллекция может иметь легко 100k данных, и итерация с циклом for слишкоммедленно, я пытаюсь с вектором.
Обе коллекции не обязательно имеют одинаковые ключи (например, карту), и данные могут быть чем-то иным, чем int (я использую двоичные данные, и обычно ключи являются целыми числами (длинный без сингла).
Вот мой пример кода (очень очень медленный код):
struct p {
unsigned long int p1;
unsigned long int p2;
};
vector<int> table1 = tables1(n); /* bigger n -> more samples */
vector<int> table2 = tables2(n); /* n = 10000 generate 150k per table */
vector<p> common;
for (unsigned long int i = 0;i < table1.size(); i++) {
for (unsigned long int j = 0; j < table2.size(); j++) {
if (table1[i] == table2[j]) {common.push_back ({i, j};}
}
}
Есть ли способ с картой, набором, или что-то, чтобы сделать это быстрее? (яначинаю с с ++)