从向量和 unordered_sets 中检索数据
Retrieving data from vectors and unordered_sets
我已经开始将数据放入 vector
和 unordered_set
中。我已经相当容易地计算出如何将数据放入,并且我知道如果我需要卸载所有数据如何取出数据,例如:
for (auto i : vehicles)
MakeSpawnInfoVehicle(i.AddedInformation);
但是,我已经达到了这样的程度,即我只需要来自 unordered_set
或 vector
的一个信息元素,例如 [=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," 取消引用迭代器的元素,如 *it
或 it->whatever
.
您使用 begin()
获得容器开头的迭代器,使用 end()
获得指向最后一个元素的迭代器。容器还可以提供其他成员函数来获取元素的迭代器 - 例如 vehicle_set.find(aVehicle)
,其中 returns 是 aVehicle
的迭代器(如果它存在于集合中),或者 end()
迭代器,如果不是。
容器提供哪些成员函数取决于它是哪个容器,尤其是操作的效率。 std::vector
不提供 find()
,因为它不会比 std::find()
好 - std::vector
中没有用于快速查找的结构。 std::unordered_set
确实提供了 find()
,但没有 operator []
,因为它的迭代器不是随机访问的:访问一个元素的第 n 个元素无序集需要的时间与 n.
成正比
我已经开始将数据放入 vector
和 unordered_set
中。我已经相当容易地计算出如何将数据放入,并且我知道如果我需要卸载所有数据如何取出数据,例如:
for (auto i : vehicles)
MakeSpawnInfoVehicle(i.AddedInformation);
但是,我已经达到了这样的程度,即我只需要来自 unordered_set
或 vector
的一个信息元素,例如 [=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," 取消引用迭代器的元素,如 *it
或 it->whatever
.
您使用 begin()
获得容器开头的迭代器,使用 end()
获得指向最后一个元素的迭代器。容器还可以提供其他成员函数来获取元素的迭代器 - 例如 vehicle_set.find(aVehicle)
,其中 returns 是 aVehicle
的迭代器(如果它存在于集合中),或者 end()
迭代器,如果不是。
容器提供哪些成员函数取决于它是哪个容器,尤其是操作的效率。 std::vector
不提供 find()
,因为它不会比 std::find()
好 - std::vector
中没有用于快速查找的结构。 std::unordered_set
确实提供了 find()
,但没有 operator []
,因为它的迭代器不是随机访问的:访问一个元素的第 n 个元素无序集需要的时间与 n.