c++ - 在 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});
如果值在多个向量中,我可以获得密钥吗?例如,如果50
Is 在两个向量中?
std::vector < int > a= {10,20,50};
std::vector < int > b= {50,60,70};
解决方案
这里适用于每个地图、值和内部容器:
#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";
}
推荐阅读
- python - numpy 按第一列搜索排序的多维数组
- import - 在 Julia 中创建共享模块的推荐方法是什么?
- apache-kafka - Spring Cloud Kafka Streams 与 Spring Cloud Stream 之间的区别?
- python - 如何在现有的 Django Web 应用程序项目中使用 Wagtail 创建新的博客页面
- python - 通过 python 在会话中使用代理
- html - 如何在 Bootstrap 4 导航栏中居中导航项并右对齐另一个?
- sms - SMS Retriever API 不适用于克隆的应用程序
- node.js - MonogDB 从 ubuntu vps 服务器连接到我的本地计算机,但未连接到服务器的 MonogDB
- android - 当我尝试运行默认的颤振应用程序时出现 validateSigningDebug 错误
- php - Remove Child 不包含属性值