Ejemplo n.º 1
0
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;
        	}
        }
    }