鉴于我有一个std::set
,我如何确定集合中的一个元素是否在另一个元素之前。例如,这样的东西-
bool before(const std::set &s, const int first, const int second) const {
auto it_first = s.find(first);
auto it_second = s.find(second);
return it_first <= it_second;
}
上面的代码不起作用,因为没有为双向迭代器定义
<=
,但是如何去做这样的事情? 最佳答案
set
按operator<
排序其元素(默认情况下)。比较器本身可以通过 key_comp
或 value_comp
检索。因此,如果两个元素都在集合中,则顺序由元素本身定义-您不需要迭代器:
return s.key_comp()(first, second);
如果集合中没有一个,则取决于您在这些情况下要执行的操作:
if (s.count(first)) {
if (s.count(second)) {
return s.key_comp()(first, second);
}
else {
/* no second */
}
}
else {
/* no first, possibly second */
}
关于c++ - 在std::set中查找元素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31973201/