我有一个看起来像这样的容器: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::map
个5
元素。 std::set
值的大小为1, 2, 1, 10, and 5
。我将阈值设置为1
,然后我希望max元素给出包含大小为std::set
的{{1}}的迭代器,并使min元素给出包含10
的{0}的迭代器大小std::set
。
答案 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();
}
);