Используйте взамен карту или неупорядоченную карту . Тогда вы можете сделать это:
std::map<string, int>names_;
// ...
unsigned int converter::initilizeSiteId(unsigned int siteNumber){
unsigned int siteId = 0;
std::map<string, int>::iterator i = names_.find(siteNames_[siteNumber]);
if (i != names_.end()){
siteId = i->second;
}
else (siteId == 0)
std::cerr << "Could not find ID for site number " << siteNumber << std::endl;
return siteId;
}
Это будет выполняться за время O (log n), а не за O (n), которое вы имели раньше.
Существуют и другие варианты, если у вас есть отсортированный список, например бинарный поиск .