I have a vector of objects and I want to return the range of elements whose attribute have a specific value. This is the structure:

```
class A {
public:
  std::vector<B*> vec_;
  pair<vector<B*>::iterator, vector<B*>::iterator> getElements(unsigned int attr_val);
  unsigned int name() { return name_; }
private:
  unsigned int name_;
};

class B {
public:
  unsigned int attr() { return attr_; }
  A* source() { return source_; }
  B* dest() { return dest_; }
private:
  A* source_;
  B* dest_;
  unsigned int attr_;
};

```

The vector `vec_` is already sorted by `attr_` and `dest_->name()` (in that order). Now I want to return all elements, whose `attr_` is equal to `attr_val`.

What is the appropriate stl algorithm (or is there even a vector member function?) to implement `getElements(unsigned int attr_val)`?