查找容器中高于阈值的最大值和最小值元素

Find the max and min element above a threshold in a container

本文关键字:最大值 最小值 元素 阈值 高于 查找      更新时间:2023-10-16

我有一个看起来像这样的容器:std::map<size_t, std::set<char>>

我想根据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::minmax_element 使 min 元素高于阈值x

例:假设我有5元素的std::mapstd::set值的大小为 1, 2, 1, 10, and 5 。我将阈值设置为 1 ,然后我希望 max 元素给出包含大小为 10 std::set的迭代器,而 min 元素给出包含大小为 2 std::set的迭代器。

您可以使用

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_element中使用此迭代器

auto minMaxElements = std::minmax_element(it, map.end(), 
    [](const auto & lhs, const auto & rhs) {
        return lhs.second.size() < rhs.second.size();
    }
);