C++ 在容器中查找高于阈值的max和min元素
我有一个看起来像这样的容器:C++ 在容器中查找高于阈值的max和min元素,c++,C++,我有一个看起来像这样的容器:std::map 我想根据std::set的大小,找到阈值x以上的绝对最大元素和最小元素 我可以使用以下行获得最大值和最小值: auto minMaxElements = std::minmax_element(cbegin(map), cend(map), [](const auto &lhs, const auto &rhs){ return lhs.second.size() < rhs.second.size()
std::map
我想根据std::set
的大小,找到阈值x
以上的绝对最大元素和最小元素
我可以使用以下行获得最大值和最小值:
auto minMaxElements = std::minmax_element(cbegin(map), cend(map),
[](const auto &lhs, const auto &rhs){
return lhs.second.size() < rhs.second.size();
});
auto minMaxElements=std::minmax_元素,
[](恒速自动和左侧、恒速自动和右侧){
返回lhs.second.size()
是否可以使用std::minmax_元素使最小元素高于阈值x
例如:
假设我有一个
std::map
的5个元素。std::set
值的大小为1、2、1、10和5
。我将阈值设置为1
,然后我希望max元素给出的迭代器包含std::set
的大小10
,min元素给出的迭代器包含std::set
的大小2
您可以使用std::find_if
来执行此操作
auto it = std::find_if(map.begin(), map.end(),
[x](const auto & l) -> bool {
return l.second.size() >= x; // >= or >, depending upon requirement
}
);
然后在std::minmax\u元素中使用该迭代器
auto minMaxElements = std::minmax_element(it, map.end(),
[](const auto & lhs, const auto & rhs) {
return lhs.second.size() < rhs.second.size();
}
);
auto-minMaxElements=std::minmax_元素(it,map.end(),
[](恒速自动和左侧、恒速自动和右侧){
返回lhs.second.size()
排序不是最有效的方法吗?地图是按大小索引的,我希望它保持这种方式。我不希望它使用值的大小来制作贴图。在贴图的键中可能有哪些值?如果size\u t
指定set
的大小,这是map的值部分,那么map不会存储所有的集合。键与集合的大小无关。您可以查看一些,然后可以在筛选视图上执行std::minmax\u元素。但是如果我这样做,我是否有可能获得低于阈值的最小元素?例如,如果大小为:1、2、1、10和5(在地图中按该顺序存储)。如果阈值为1。auto,则它将指向2,end将指向5。在此范围内,最小值为1,最大值为10。@user3666471std::find_if
将只迭代到阈值x
以上的元素。尝试运行它并查看结果。