#c #stdvector #stdmap
#c #stdvector #stdmap
Вопрос:
У меня есть карта со строками в качестве ключей и векторами в качестве значений:
map<string,vector<int>> myMap;
//("key", value):
("a", {1})
("b", {2,3})
("c", {1})
("d", {1})
("e", {2,3})
Возможно ли получить ключи на основе их значений? Я хочу, чтобы ключи имели одинаковое значение, т.е.
(a, c, d) и (b, e).
Комментарии:
1.Что, если e содержит
1
среди2
и3
, это равноa
c
иd
?2. @MarekR, я думаю, OP хочет получить «a», «c» и «d», если он предоставит вектор {1}.
3. Я думаю, что самый простой и простой способ — перебирать все элементы карты и сравнивать их значения.
Ответ №1:
Вы должны смотреть на каждый элемент
std::vector<std::string> keys_matching(const std::map<std::string, std::vector<int>> amp; map, const std::vector<int> amp; value) {
std::vector<std::string> resu<
for (auto amp; [k, v] : map) {
if (v == value) {
result.push_back(k);
}
}
return resu<
}
Ответ №2:
using Data = std::map<std::string, std::vector<int>>;
using ReversedData = std::unordered_map<int, std::vector<std::string>>;
ReversedData reverseValues(const Dataamp; d)
{
ReversedData r;
for (const auto amp;[key, vec] : d) {
for (auto x : vec) r[x].push_back(key);
}
return r;
}
Комментарии:
1. Похоже, это было бы вариантом использования
std::unordered_multimap
.