use*_*117 2 c++ vector unordered-set
我已经开始将数据放入vectors和unordered_sets.我已经很容易地解决了如何将数据放入其中的问题,并且我知道如果需要卸载所有数据,如何获取数据,例如:
for (auto i : vehicles)
MakeSpawnInfoVehicle(i.AddedInformation);
Run Code Online (Sandbox Code Playgroud)
不过,我已经到了一个地步,我想从任一信息只有一个元素unordered_setS或vectorS,从而为有史以来第10项是在什么vector或unordered_set.
如果有人可以提供两者的基本例子,我相信我会理解它.
在这种情况下,您可以参考一个很好的参考.
std::vector提供operator[]恒定时间性能:
auto tenth_element = vehicle_vector[9];
Run Code Online (Sandbox Code Playgroud)
std::unordered_set针对基于元素的查找进行了优化(即,测试元素是否存在).您很少需要第10个元素(特别是因为根据定义,该集合是无序的),但如果您这样做,则使用迭代器,递增它并取消引用它:
auto tenth_element = *std::next(vehicle_set.begin(), 9);
Run Code Online (Sandbox Code Playgroud)
通常,您可以通过容器的成员函数(例如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 [],因为它的迭代器不是随机访问:访问无序集合的第n个元素需要与n成比例的时间.