Choose efficient algorithms and data structures to improve performance and reduce computational overhead. This involves selecting appropriate containers, avoiding unnecessary operations, and leveraging language features for optimization.
Key optimization strategies:
til::static_map over std::unordered_map for compile-time initialization, or wil::to_vector for collection cloninginsert() instead of separate contains() + insert() callsstd::move when transferring ownership, especially with expensive objects like std::filesystem::pathlstrcmpiW with more efficient alternatives like ICU functions for Unicode handlingExample of inefficient vs optimized approach:
// Inefficient: separate contains + insert
if (!state->DismissedBadges->contains(badgeId)) {
state->DismissedBadges->insert(badgeId);
inserted = true;
}
// Optimized: use insert return value
auto [iter, inserted] = state->DismissedBadges->insert(badgeId);
For mathematical computations, choose appropriate distance metrics - use squared Euclidean distance r*r + g*g + b*b instead of Manhattan distance abs(r) + abs(g) + abs(b) for color comparisons to better represent perceptual differences.
Enter the URL of a public GitHub repository