Boost logo

Boost Users :

Subject: [Boost-users] algorithm question
From: Peter Foelsche (foelsche_at_[hidden])
Date: 2011-07-08 22:44:39


Dear All,

I'm trying to get some objects sorted.
Every object has a set of pointers to other objects,
which need to come before this object (or are considered smaller than this
object).
It is kind of a make-tool algorithm.
I can imagine the straight-forward way to attack this -- searching.
Is there some more elegant way I'm missing?
The number of objects not small.
I tried to write some recursive functor to be passed to std::sort -- caching
the result of previous comparisions
-- but I was not successful.
My brain is hurting...

Thanks
Peter

struct object
{ std::set<object*> m_sPredecessors;
};

// to be sorted:
std::list<object*> sList;

std::list<object*> sort(std::list<object*> _sList)
{ std::set<object*> sSet;
       std::list<object*> sSorted;
    while (_sList.size())
    for (std::list<object*>::iterator p = _sList.begin(), pNext = p, pEnd =
_sList.end();
        p != pEnd;
        p = pNext)
    { ++pNext;
        bool bFound = false;
        for (std::set<object*>::const_iterator p1 =
(*p)->m_sPredecessors.begin(), p1End = (*p)->m_sPredecessors.end();
            p1 != p1End;
            ++p1)
                if (sSet.find(*p1) == sSet.end())
                { bFound = true;
                       break;
                  }
            if (!bFound)
            { sSorted.push_back(*p);
                _sList.erase(p);
            }
    }
    return sSorted;
}


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net