[英]Retrieving data from vectors and unordered_sets
我已经开始将数据放入vector
和unordered_set
。 我已经很容易地解决了如何放入数据的问题,并且如果需要卸载所有数据,我知道如何取出数据,例如:
for (auto i : vehicles)
MakeSpawnInfoVehicle(i.AddedInformation);
但是,我已经达到了这样一个地步:我只想要unordered_set
或vector
的一个信息元素,例如vector
或unordered_set
的第10个条目。
如果有人可以提供这两者的基本示例,我相信我会理解的。
在这种情况下,您可以参考参考 。
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()
获得到容器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.