我已经开始将数据放入 vector
和unordered_set
中。我已经相当容易地弄清楚如何放入数据,并且如果我需要卸载所有数据,我知道如何取出数据,例如:
for (auto i : vehicles)
MakeSpawnInfoVehicle(i.AddedInformation);
但是,我已经达到了这样的程度:我只需要来自 unordered_set
或 vector
的一个信息元素,例如第 10 个条目所在的内容 vector
或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);
一般来说,您可以通过容器的成员函数(例如上面 vector 的运算符[]
)或通过迭代器来访问容器的元素。
迭代器是指针的泛化 - 它是指向容器中元素的某种未指定的类型。然后,您可以使用迭代器的成员函数(例如 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 成正比。
关于c++ - 从 vector 和 unordered_sets 中检索数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28055277/