繁体   English   中英

从向量和unordered_sets检索数据

[英]Retrieving data from vectors and unordered_sets

我已经开始将数据放入vectorunordered_set 我已经很容易地解决了如何放入数据的问题,并且如果需要卸载所有数据,我知道如何取出数据,例如:

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

但是,我已经达到了这样一个地步:我只想要unordered_setvector的一个信息元素,例如vectorunordered_set的第10个条目。

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

在这种情况下,您可以参考参考

std::vectoroperator[]提供了恒定时间的性能:

auto tenth_element = vehicle_vector[9];

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

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

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

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

您可以使用begin()获得到容器begin()的迭代器,并使用end()到最后一个元素的迭代器。 容器还可以提供其他成员函数以将迭代器获取到元素,例如vehicle_set.find(aVehicle) ,如果集合中存在迭代器, aVehicle迭代器返回给aVehicle如果不存在,则返回end()迭代器。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM