获取地图值作为向量的最佳方法是什么

What is the best way to get values of a map as a vector?

本文关键字:最佳 方法 是什么 向量 地图 获取      更新时间:2023-10-16

我需要满足一个需要向量的 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"是地图中包含的值的数量(。