bool isSingleSubSetSequence(const list<S>& s1, const list<set<S> >& s2) { if (s1.empty()) return true; typename list<S>::const_iterator it1 = s1.begin(); typename list<set<S> >::const_iterator it2 = s2.begin(); for (; it2 != s2.end(); ++it2) if (it2->find(*it1) != it2->end()) if (++it1 == s1.end()) return true; return false; }
T & at(int i, int j){ entries_no++; if(grid.empty()){ list<node<T> > dummy_row; node<T>* dummy_node = new node<T>(i, j); dummy_row.push_back(*dummy_node); grid.push_back(dummy_row); col_no=1; return ((grid.front()).front()).val ; } else{ typename list< list<node<T> > >::iterator itr_row = grid.begin(); for(;itr_row!=grid.end();itr_row++){ if( (*(*itr_row).begin()).row == i){ typename list<node <T > >::iterator itr_col = itr_row.begin(); for(; itr_col != (*itr_row).end(); itr_col++){ if(*itr_col == j) return (*itr_col).val; else if(*itr_col > j){ node<T>* dummy_node = new node<T>(i, j); typename list<node<T> >::iterator to_be_return = (*itr_row).insert(itr_col, *dummy_node); return (*to_be_return).val; } } if(itr_col == itr_row.end()){ node<T>* dummy_node = new node<T>(i, j); (*itr_row).push_back(*dummy_node); return (*((*itr_row).back())).val; } } else if( (*(*itr_row).begin()).row > i){ list<node<T> > dummy_row; node<T>* dummy_node = new node<T>(i, j); dummy_row.push_back(*dummy_node); typename list<list<node<T> > >::iterator to_be_return = grid.insert(itr_row, dummy_row); row_no++; return (*((*to_be_return ).front())).val; } } if(itr_row==grid.end()){ list<node<T> > dummy_row; node<T>* dummy_node = new node<T>(i, j); dummy_row.push_back(*dummy_node); grid.push_back(dummy_row); row_no++; return ((grid.back()).back()).val; } } }