Consideriamo che ho un'istanza std::string
piena di dati testuali e un'istanza std::set<std::string>
con parole chiave. Vorrei sapere se il testo memorizzato all'interno di std::string
contiene tutte le parole chiave da std::set<std::string>
. Per raggiungere questo obiettivo ho preso in considerazione due possibili implementazioni:
Restituzione di true
o false
esplicitamente
bool isContainsAllKeywords(const std::string& textualData,
const std::set<std::string>& keywords) {
for(const auto& keyword : keywords) {
if(textualData.find(keyword) == std::string::npos)
return false;
}
return true;
}
Restituzione del risultato del confronto
bool isContainsAllKeywords(const std::string& textualData,
const std::set<std::string>& keywords) {
auto keywordIterator = keywords.begin();
for(; keywordIterator != keywords.end(); ++keywordIterator) {
if(textualData.find(*keywordIterator) == std::string::npos)
break;
}
return keywordIterator == keywords.end();
}
Dai miei esempi sopra quali sono più puliti e quale è il preferito? Poiché questa domanda può portare a risposte basate su opinioni, aggiungerei che mi aspetto risposte di riserva.
In ogni caso, forse entrambi i miei esempi sono sporchi, quindi in primo luogo vorrei sapere come risolvere questi problemi in modo pulito.
Modifica: la mia domanda mira alla leggibilità dei confronti basati su loop in cui un contenitore viene confrontato con un altro e generalmente non a: " Come faresti a sapere se hai scritto codice leggibile e facilmente gestibile? " .