【发布时间】:2018-01-03 02:16:02
【问题描述】:
我有一个小函数,它通过一个向量循环查找给定的动物并返回它的栖息地。我需要优化它,但我正在做我可以做的事情。我突然想到的三件事是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.";
}
有什么我可能遗漏的东西可以改进这个功能吗?任何提示都会很棒。谢谢!
【问题讨论】:
-
不要使用
vector,使用map或unordered_map。那么你根本不需要循环。对循环进行微优化不太可能给您带来比现在更好的性能。 -
考虑像
size_t和前后增量不值得你花时间。您需要考虑不同的数据结构。你考虑过std::map吗? -
这个数据排序了吗?
-
啊,是的!一张地图。这完全掩盖了我的想法。这会让 WAY 更有意义。
-
@Jake Freeman 未知此向量是否已排序。
标签: c++ for-loop optimization vector