在容器中查找高于阈值的max和min元素

时间:2016-06-08 05:14:23

标签: c++

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

我希望根据x的大小找到超出阈值std::set的绝对最大元素和最小元素。

我可以使用以下行获得最大值和最小值:

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以上?

实施例: 假设我有std::map5元素。 std::set值的大小为1, 2, 1, 10, and 5。我将阈值设置为1,然后我希望max元素给出包含大小为std::set的{​​{1}}的迭代器,并使min元素给出包含10的{​​0}的迭代器大小std::set

1 个答案:

答案 0 :(得分:3)

您可以使用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();
    }
);