Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在容器中查找高于阈值的max和min元素_C++ - Fatal编程技术网

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。@user3666471
std::find_if
将只迭代到阈值
x
以上的元素。尝试运行它并查看结果。