从向量和 unordered_sets 中检索数据

Retrieving data from vectors and unordered_sets

我已经开始将数据放入 vectorunordered_set 中。我已经相当容易地计算出如何将数据放入,并且我知道如果我需要卸载所有数据如何取出数据,例如:

for (auto i : vehicles)
    MakeSpawnInfoVehicle(i.AddedInformation);

但是,我已经达到了这样的程度,即我只需要来自 unordered_setvector 的一个信息元素,例如 [=12] 中的第 10 个条目=] 或 unordered_set.

如果有人能提供两者的基本示例,我相信我会理解的。

遇到这种情况,可以参考good reference

std::vector 提供 operator[] 恒定时间性能:

auto tenth_element = vehicle_vector[9];

std::unordered_set 针对基于元素的查找进行了优化(即测试元素是否存在)。您很少需要第 10 个元素(特别是因为根据定义,集合是 无序 ),但如果您这样做,您需要一个迭代器,递增它并取消引用它:

auto tenth_element = *std::next(vehicle_set.begin(), 9);

一般来说,您可以通过容器的成员函数(例如上面向量的operator [])或通过迭代器访问容器的元素。

迭代器是指针的概括 - 它是一些未指定的类型,指向容器中的一个元素。然后,您可以使用迭代器使用它们的成员函数,如 operator ++ 或自由函数,如 std::next()。随机访问迭代器也支持 []。获取迭代器 "points," 取消引用迭代器的元素,如 *itit->whatever.

您使用 begin() 获得容器开头的迭代器,使用 end() 获得指向最后一个元素的迭代器。容器还可以提供其他成员函数来获取元素的迭代器 - 例如 vehicle_set.find(aVehicle),其中 returns 是 aVehicle 的迭代器(如果它存在于集合中),或者 end() 迭代器,如果不是。

容器提供哪些成员函数取决于它是哪个容器,尤其是操作的效率。 std::vector 不提供 find(),因为它不会比 std::find() 好 - std::vector 中没有用于快速查找的结构。 std::unordered_set 确实提供了 find(),但没有 operator [],因为它的迭代器不是随机访问的:访问一个元素的第 n 个元素无序集需要的时间与 n.

成正比