获取地图值作为向量的最佳方法是什么
What is the best way to get values of a map as a vector?
我需要满足一个需要向量的 api 函数:
void api_function(std::vector<int> vec);
出于另一个原因,我将值保存在
std::map<int,int> map;
现在我需要将此映射的值传递给api_function。
有没有办法在不产生太多空间和时间开销的情况下做到这一点,即无需遍历所有值或创建新向量?
不,没有。向量连续存储其元素,而映射则不存储,因此如果不迭代和复制,就无法创建连续的整数排列。
(出于这个原因,通用算法不会在容器上运行,而是在更灵活的接口(如迭代器(上运行,这样它们就不会强迫用户提供范围的特定实现。
如果一个函数要求向量,你必须给它一个向量。最多,这将帮助您在 STL 中将映射值复制到矢量。
您可以通过在地图上使用简单的范围循环并将每个值推送到向量中,然后将其传递给函数来执行此操作。
喜欢这个:
for (const auto& pair : map)
vector.push_back(pair.second);
您可能希望使用内部使用排序向量的映射实现("密集映射"(。
正如kerrek SB所说,答案是否定的。您需要遍历地图。
您可以执行以下操作以向动态矢量容器添加值。使用 std::p air 遍历地图。这样你就没有使用真正的迭代器:
std::vector<int> vec;
for (std::pair<int, int>& e : map) {
vec.push_back(e.second);
}
...
...
api_function(vec); // Invoke function
最后,您可以使用向量从 API 调用函数。
这将产生 O(n( 的计算时间和空间复杂度(其中"n"是地图中包含的值的数量(。
相关文章:
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- 在C++中向零方向近似的最佳方法
- 使用不同的CRT将新的C++代码与旧的(二进制)组件隔离开来的最佳方法是什么
- 检测win32服务创建和删除的最佳方法
- 在C++中样板"冷/never_inline"错误处理技术的最佳方法是什么?
- 在 c++ 中对类中的 c 字符串动态数组进行排序的最佳方法是什么?
- 将线程中的数据存储到全局容器的最佳方法?
- 将一系列整数放入类的最佳方法是什么?
- 在派生类中使用基类的私有成员变量的最佳方法
- 在 C++ 中将非指定类型作为参数传递的最佳方法?
- Qt - QVector 和模型视图 - 从列表视图获取自定义类的最佳方法是什么?
- 使用 Git 处理 C++ Visual Studio 2019 解决方案的外部依赖项源代码管理的最佳方法是什么?
- 比较两个节点坐标的最佳方法是什么?
- 在nodejs中使用本机代码的最佳方法是什么?
- 将 pybind11 绑定标记为已弃用的最佳方法
- C++:将向量传递到构造函数以创建成员变量的最佳方法?
- C++中变量混叠的最佳方法
- 读取大文件(>2GB)(文本文件包含以太网数据)并通过不同参数随机访问数据的最佳方法是什么?