首页 > 解决方案 > 在 std::map < int , std::vector 中查找向量中元素的值>

问题描述

有没有更漂亮的方法从地图中的向量中获取值without using loops?例如,如何获取具有 value 元素的向量的键50

std::map < int , std::vector < int >> myMap;
std::vector < int > a= {10,20,30};
std::vector < int > b= {50,60,70};
myMap.insert({1000,a});
myMap.insert({2000,b});

如果值在多个向量中,我可以获得密钥吗?例如,如果50Is 在两个向量中?

std::vector < int > a= {10,20,50};
std::vector < int > b= {50,60,70};

标签: c++

解决方案


这里适用于每个地图、值和内部容器:

#include <iostream>

#include <map>
#include <vector>
#include <algorithm>
#include <iterator>
#include <optional>


template <typename ValueT, typename MapT>
std::optional<typename MapT::key_type> find_key_for_value_contained_in_intern_container(const ValueT& value, const MapT& map) {
    auto key_it = std::find_if(std::begin(map), std::end(map), [&value] (const auto & element) {
        return std::find(std::begin(element.second), std::end(element.second), value) != std::end(element.second);
    });
    return (key_it != std::end(map)) ? key_it->first : std::optional<typename MapT::key_type>();
}

int main() {
    std::map<int, std::vector<int >> myMap;
    std::vector<int> a = {10, 20, 30};
    std::vector<int> b = {50, 60, 70};
    myMap.insert({1000, a});
    myMap.insert({2000, b});

    int value_to_search{50};

    auto key = find_key_for_value_contained_in_intern_container(value_to_search, myMap);

    if (key)
    std::cout << "Value " << value_to_search << " is at key " << *key << "\n";
}

推荐阅读