我需要满足需要向量的api函数:
void api_function(std::vector<int> vec);
另一个原因是,我将值保存在
中std::map<int,int> map;
现在我需要将此映射的值传递给api_function。
有没有办法在没有太多空间和时间开销的情况下做到这一点,即不迭代所有值或创建新向量?
答案 0 :(得分:3)
不,没有。向量连续存储其元素,而地图则不存在,因此没有迭代和复制就无法创建连续的整数排列。
(由于这个原因,通用算法不会对容器进行操作,而是采用更加灵活的界面,如迭代器,这样他们就不会强迫用户提供范围的特定实现。)< / p>
答案 1 :(得分:2)
您可以通过在地图上使用简单的范围循环并将每个值推送到矢量然后将其传递给您的函数来完成此操作。
像这样:
for (const auto& pair : map)
vector.push_back(pair.second);
答案 2 :(得分:2)
如果一个函数要求向量,你必然会给它一个向量。这最多可以帮助您Copy map values to vector in STL。
答案 3 :(得分:1)
正如kerrek SB所说,答案是否。您需要遍历地图。
您可以执行以下操作将值添加到动态矢量容器中。使用std::pair遍历地图。这样你就不会使用真正的迭代器了:
std::vector<int> vec;
for (std::pair<int, int>& e : map) {
vec.push_back(e.second);
}
...
...
api_function(vec); // Invoke function
最后,您可以使用向量从API调用您的函数。
这将产生计算时间和空间复杂度O(n)(&#34; n&#34;是值包含在您的地图)。
答案 4 :(得分:1)
您可能希望使用内部使用有序向量的地图实现(“密集地图”)。