如何从std::map值的std::向量中找到最小键值
How can I find the minimum key value from an std::vector of std::map values?
我有一个std::vector
的std::map
值:
std::vector<std::map<std::string, double>> dataPoints;
我想找到最低的low
值,74.0。这是我目前的申请:
#include <vector>
#include <map>
#include <iostream>
int main() {
std::vector<std::map<std::string, double>> dataPoints;
dataPoints.push_back({{{"high", 77.0}, {"low", 74.0}}});
dataPoints.push_back({{{"high", 78.0}, {"low", 75.0}}});
dataPoints.push_back({{{"high", 79.0}, {"low", 76.0}}});
dataPoints.push_back({{{"high", 80.0}, {"low", 77.0}}});
dataPoints.push_back({{{"high", 81.0}, {"low", 78.0}}});
return 0;
}
到目前为止,我发现的最接近的是:
double min = std::min_element(dataPoints.begin(), dataPoints.end(), [](std::map<std::string, double> &a, std::map<std::string, double> &b) { return (a["low"] < b["low"]); })["low"];
但这并不完全奏效。
在JavaScript中,我可以实现以下目标:
low = _.min(_.map(dataSegment, function(dataPoints) {
return dataPoint.low;
}));
您想要的是min_element
,而不是max_element
。它返回一个迭代器,所以你会想取消引用它
如果"low"
不在映射中,我想您可能不想插入零。所以用at
代替[]
;这也使我们能够全面地构成整个事情。
double min = std::min_element(dataPoints.cbegin(), dataPoints.cend(),
[](const std::map<std::string, double> &a,
const std::map<std::string, double> &b) {
return a.at("low") < b.at("low");
})->at("low");
Map用于存储键/值对。如果有两个始终相同的关键点,那么使用贴图是没有意义的。您也不需要对这些键进行排序。
如果给定的第一个值为高,第二个值为低,则可以使用:
std::pair <double, double>
这样,每次添加新值时,都会节省两个std::字符串大小的内存空间。
向量在存储无序序列时很有用。根据您是否希望对数据进行排序,您可以在此处使用一个集合,并根据高低进行比较。这将加快找到最小值到恒定时间的速度。
设置:
std::set <std::pair <double, double>>.
Set是一个已排序的容器。有了set,如果您的最低值在顶部,则可以使用begin();如果您的最低点在底部,则使用end() 如果选择未排序,则使用std::vector。如果您的容器经常更改并且可能是大,那么您可能需要std::deque。如果您的容器有一个固定大小并且您不打算修改它,那么请使用std::array。在这种情况下,您可以在此处使用min_element。这种类型的搜索是线性时间。 编辑 如果你想坚持std::vector<std::映射<std::string,double>>以下内容应该有效: 在此处测试:http://ideone.com/sdG6fk//min_element returns std::vector<std::map<std::string, double>>::iterator
auto minDataPoint = std::min_element(dataPoints.begin(), dataPoints.end(), [](std::map<std::string, double> &a, std::map<std::string, double> &b) {
return (a["low"] < b["low"]);
});
std::cout<<"low "<<(*minDataPoint)["low"];
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- 使用一个考虑到std::map中键值的滚动或换行的键
- C++匿名结构作为std::映射值
- 如何使用 std::variant 打印地图键/值?
- 当键值是 std 向量时,为什么使用 at in C++ 访问映射值如此缓慢?
- 在 std::unordered_map 中插入新的键/值对会导致"out of range"异常
- C++ std::map 缓存,使用 std::string 作为键值
- 为什么 std:map 不能接受指针作为键值?
- 将键值对文件读入 std::map
- 如何从std::map值的std::向量中找到最小键值
- C++:将自定义哈希键值从 unordered_map 输出到 std::cout 时出错
- 如何在std::map上迭代返回基于键值排序的元素
- 复制/移动std::映射中键/值类型的要求
- 当std::map值的键不存在时初始化该值
- 更新std::map中的键值
- 在c++中迭代std::map的键/值
- 将std::string就地标记为键值映射
- 如何创建std::map键值随机
- 使用std::map C++的多个键值
- 如果在std::map中操作不存在的键值对会发生什么?