我已经开始将数据放入vector
和unordered_set
。我已经很容易地解决了如何将数据放入其中,并且我知道如果需要卸载所有数据,如何获取数据,例如:
for (auto i : vehicles)
MakeSpawnInfoVehicle(i.AddedInformation);
但是,我已经达到了这样的程度:我只需要来自unordered_set
或vector
的一个信息元素,例如vector
中的第10个条目或unordered_set
。
如果有人可以提供两者的基本示例,我相信我会理解它。
答案 0 :(得分:5)
在这种情况下,您可以咨询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()
等自由函数来使用迭代器。随机访问迭代器也支持[]
。要获取迭代器“指向”的元素,请取消引用像*it
或it->whatever
这样的迭代器。
使用begin()
获取到容器开头的迭代器,使用end()
获取一个超过最后一个元素的迭代器。容器还可以提供其他成员函数来获取元素的迭代器 - 例如vehicle_set.find(aVehicle)
,如果它存在于集合中则返回aVehicle
的迭代器,如果它是end()
迭代器则返回std::vector
迭代器。不
容器提供的成员函数取决于它是哪个容器,特别是操作的效率。 find()
未提供std::find()
,因为它不会比std::vector
更好 - std::unordered_set
中没有用于快速查找的结构。 find()
确实提供operator []
,但没有{{1}},因为它的迭代器不是随机访问:访问无序集的 n 元素需要时间与 n。