Boost logo

Boost :

Subject: [boost] [filesystem] operator == performance
From: Konstantin Litvinenko (to.darkangel_at_[hidden])
Date: 2009-01-17 06:11:05


Hi!

I am developing an application with very intensive
boost::filesystem::path usage. At certain moment application start to be
slowly and I start profiler. Profiler shows me that
   std::map<fs:path, ....>
is painfully slow due path::operator <() that do

lexicographical compare

, that do

void iterator_helper<Path>::do_increment( iterator & itr )

that is really slow.

So I have replaced std::map on boost::unordered_map.. and didn't get
expected performance gain. Profiles show me that path::operator <() hit
count 200000 and now only 100000. That tooooo much. Further
investigation shows that problem was path::operator ==() used in
unordered_map. I understand that operator == can be implemented using
strict weak ordering concept, but for filesystem::path. Why not
implement it as:

bool path::operator == (const path& lhs, const path& rhs) const
{
    return lhs.string() == rhs.string();
}

?


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk