鉴于我有一个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;
}

上面的代码不起作用,因为没有为双向迭代器定义<=,但是如何去做这样的事情?

最佳答案

setoperator<排序其元素(默认情况下)。比较器本身可以通过 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/

10-13 00:05