这是C++中Char*vs String Speed的后续问题.我已经声明了以下变量:
std::vector<std::string> siteNames_;
std::vector<unsigned int> ids_;
std::vector<std::string> names_;
Run Code Online (Sandbox Code Playgroud)
我称这个功能成千上万次,是一个主要的瓶颈.是否有更有效的方法来比较字符串?答案必须是跨平台兼容的.
unsigned int converter::initilizeSiteId(unsigned int siteNumber){
unsigned int siteId = 0;
for (unsigned int i = 0; i < ids_.size(); i ++){
if (siteNames_[siteNumber].compare(names_[i]) == 0){
siteId = ids_[i];
break; // Once found, will stop searching and break out of for loop
}
}
if (siteId == 0)
std::cerr << "Could not find ID for site number " << siteNumber << std::endl;
return siteId;
}
Run Code Online (Sandbox Code Playgroud)
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;
}
Run Code Online (Sandbox Code Playgroud)
这将在O(log n)时间内执行,而不是之前的O(n).
如果您有一个排序列表,还有其他选项,例如二进制搜索.