Получение ключей из map на основе их значения c

#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;
}
  

https://godbolt.org/z/7csM36

Комментарии:

1. Похоже, это было бы вариантом использования std::unordered_multimap .