仮想マップを使ってないなら

class object;
class character : public object;
...
map<int, object*> viewList;
...
character chara;

// 登場している個数分繰り返す。画面に表示されていないものは弾く
const int key = chara.dy() - chara.height(); // 足下座標で管理
viewList.insert(key, *chara);

...
// 描画部分は
for(map<int, object*>::iterator ite = viewList.begin(); ite != viewList.end(); ite++) {
  object* p = (*ite).second;
  p->draw(...);
}

とかやるだけじゃね?