0 c++ optimization for-loop vector
我有这个小功能循环通过矢量来找到一个给定的动物并返回它的栖息地.我需要对它进行优化,但是我正在做我可以做的事情.突然出现在我身上的三件事是size_t,i++以及我正在通过矢量循环的事实.我读到这size_t对于具有大尺寸索引的数组非常有用.我知道这pre-increment比post-increment改变原始值而不是创建临时值和增量更好.但编译器通常会优化这个小差异.最后,我想到的最后一件事是这个向量可能是未分类的,因此在性能方面有所下降.我正在考虑按动物的物种变量对载体进行分类,然后可能将其移植到一个BST搜索中,因为时间复杂度会是这样O(log(n)).这是我正在使用的代码:
string GetAnimalHabitat(vector<Animal> animals, string species)
{
for (size_t i = 0; i < animals.size(); i++)
{
if (animals[i].species == species)
{
return animals[i].habitat;
}
}
return "Animal not within records.";
}
Run Code Online (Sandbox Code Playgroud)
有什么我可能遗失的东西可以改善这个功能吗?任何提示都会很棒.谢谢!
一个std::map肯定的作品比这里遍历一个矢量更好:
string GetAnimalHabitat(const map<string, string>& animals, const string& species)
{
auto search = animals.find(species);
if (search != animals.end())
return search->second;
return string("Animal not within records.");
}
Run Code Online (Sandbox Code Playgroud)
但是,它需要首先构建地图.但是构建一次就足够了,你只需要添加新的密钥对:
map<string, string> build_map(const vector<Animal>& animals)
{
map<string, string> ret;
for (const auto& x : animals)
ret[x.species] = x.habitat;
return ret;
}
Run Code Online (Sandbox Code Playgroud)