Daryle Walker <[EMAIL PROTECTED]> writes: > On Thursday, August 21, 2003, at 10:12 PM, Beman Dawes wrote: > >> At 06:38 PM 8/21/2003, David Abrahams wrote: >> >>> I need to make a mapping over paths. Is there any important reason >>> there's no operator< provided? >> >> I don't think it has been discussed. I've had the need myself, but >> worked around it by using path::string() to generate the key. >> >> There were a number of discussions about operator== and !=. They can >> be subject to serious abuse and misunderstanding, and so are left >> out. I'm still not sure if that was the right decision, so might be >> willing to review it. >> >> Anyhow, we should be able to support maps and sets of paths. I'll >> try to give it some thought in the morning when I'm wider awake. > > If it isn't safe to even have the equality operators, then having the > ordered inequality operators may not be safe either. If David has an > ordering he wants to use in mind, then a custom comparison function > object class can be made. > > I've seen quite a few requests for operator<() for class that don't > have it (e.g. std::complex<>) just for the purpose of using it as an > element type of an associative container. Forcing a type of have such > an operator, even when it's inappropriate (i.e. the type doesn't > suggest an overwhelmingly-natural ordering), defeats the purpose of > the associative container class templates having comparator types in > the first place!
But paths do have such an ordering. It's a lexicographic compare on the conceptual underlying vector they contain. In other words x.m_name < y.m_name Unfortunately, that vector isn't available to clients of path so you have to use x.string() < y.string(), which is only a poor substitute for the actual vector. -- Dave Abrahams Boost Consulting www.boost-consulting.com _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost