Created
February 3, 2024 00:35
-
-
Save Const-me/56ad35a6ad3b65665dc79423a9270fde to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
std::vector<std::string> someFunction( const Invocation& invocation ) | |
{ | |
// Define hash and comparison for string pointers, by value | |
struct StringPtrTraits | |
{ | |
size_t operator()( const std::string* rsi ) const | |
{ | |
return std::hash<std::string>()( *rsi ); | |
} | |
bool operator()( const std::string* a, const std::string* b ) const | |
{ | |
return ( *a == *b ); | |
} | |
}; | |
using TagsCollection = std::unordered_set<const std::string*, StringPtrTraits, StringPtrTraits>; | |
TagsCollection tags; | |
// Add input strings to the hash set | |
// This loop doesn't copy any strings, the hash set references the original pointers | |
for( const auto& error : invocation.errors() ) | |
for( const std::string& s : error.tags() ) | |
tags.insert( &s ); | |
// And here we make copies | |
std::vector<std::string> result; | |
result.reserve( tags.size() ); | |
for( const std::string* e : tags ) | |
result.push_back( *e ); | |
return result; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment