c++ - 从 vector 和 unordered_sets 中检索数据

标签 c++ vector unordered-set

我已经开始将数据放入 vector unordered_set中。我已经相当容易地弄清楚如何放入数据,并且如果我需要卸载所有数据,我知道如何取出数据,例如:

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

但是,我已经达到了这样的程度:我只需要来自 unordered_setvector 的一个信息元素,例如第 10 个条目所在的内容 vector unordered_set

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

最佳答案

遇到这种情况,您可以咨询good reference .

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

auto tenth_element = vehicle_vector[9];

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

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

一般来说,您可以通过容器的成员函数(例如上面 vector 的运算符[])或通过迭代器来访问容器的元素。

迭代器是指针的泛化 - 它是指向容器中元素的某种未指定的类型。然后,您可以使用迭代器的成员函数(例如 operator++)或自由函数(例如 std::next())来使用迭代器。随机访问迭代器还支持[]。要获取迭代器“指向”的元素,请取消引用迭代器,例如 *itit->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/

相关文章:

c++ - 调整 vector 大小是否会使迭代器无效?

C++:为什么 unordered_set::find 比 find 快?

c++ - 如何将 emplace 用于将 shared_ptr 保存到对象的 unordered_set?

c++ - 将二维 boolean 值传递给函数

c++ - 如何使用 lock_guard 在 c++11 中实现 scoped_lock 功能

c++ - gcc 找不到模板专门化

c++ - 使用shrink_to_fit()释放 vector vector 中的内存

c++ - 一个好的数学 vector/矩阵类/结构可以为 C++ 下载?

C++ 正在使用 [](int i){return i;} 作为 unordered_set 散列函数的好习惯吗?

c++ - 当系统区域设置为法语时,德语资源仅从资源 dll 加载