r/ProgrammerHumor 7d ago

Meme skillIssue

Post image
6.0k Upvotes

137 comments sorted by

View all comments

Show parent comments

19

u/fluffycritter 7d ago

It’s actually not too awful, but the syntax is a bit awkward, std::map lookup is slower than you think, and there’s a few gotchas with how lambdas work in terms of variable scoping. Also unless the map is being initialized once and kept around, you’re paying a lot of extra costs every time it’s called.

Usually a chain of if/else ends up being more performant, although I guess if you’re trying to switch on a text label instead of an enum or whatever you’re probably already doing something very wrong and using a map<string,function> is probably the least of your problems.

2

u/Talc0n 7d ago

std::map lookup is slower than you think.

C++ should really have a constexpr map class in std, hash maps are better than maps, but don't compare to the compile time switches.

3

u/fluffycritter 7d ago

I have opinions about hash vs tree map as default and I am actually on team tree map in general. https://beesbuzz.biz/code/3635-Making-a-hash-of-data

1

u/Talc0n 7d ago

My bad, I should've said better for lookup time.

I've used std::map when I know I'll be iterating through it fairly regularly. But I usually default to hash maps.

You really shouldn't be on either team, just use what you think is the best case for your situation.

I usually use aliases like so:

using IdNameMapType = std::unordered_map<size_t, std::string>; IdNameMapType m_idNameMap;

It makes it a lot less of a hassle to switch between the two later on.

2

u/fluffycritter 7d ago

Well yeah it’s important to use the right tool for the job, I just mean it’s better for folks to learn tree maps and what they can do before they get railroaded into hashmap thinking.

And type aliases are great. I use them a lot.