c++ - 在 C++ 中将 map (value,index) 转换为 vector (index,value) 的最快方法是什么?

标签 c++ dictionary vector

我有一张 map ,我想将其转换为 vector 。但我也想翻转键和值;并根据新 key 对它们进行排序。但是它必须尽可能快,因为它有大约 300.000 个元素。

为了更好的解释:

map :

a->5
b->3
c->4
d->2
e->6
f->1

vector 应该是这样的->[f,d,b,c,a,e]

一个循环可以吗?

最佳答案

其实很简单。假设映射值是字符串,您可以这样做:

std::vector<std::string> myVector(myMap.size());
for (auto const& mapEntry : myMap) {
    myVector[mapEntry->second - 1] = mapEntry->first;
}

但是没有检查索引值。您必须确保(排序时)这些是从 1 开始的连续整数。 map 本身当然不能保证这一点。可能存在重复或空白。

编辑:刚刚注意到您在评论中写道,值是具有三个浮点坐标的点。然后只需将我的代码中的 std::string 替换为您的点类型。我只想补充一点,使用浮点值作为映射键通常不是一个好主意,因为可能会出现舍入错误。但这与你的问题无关。

关于c++ - 在 C++ 中将 map (value,index) 转换为 vector (index,value) 的最快方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39159229/

相关文章:

c++ - 重写 C/C++ 中的方法,例如 Delphi

javascript - 如何将多个对象合并/组合到数组中

c++ - 如果抛出的异常总是异常对象的拷贝,为什么不调用这个复制构造函数?

c++ - 将 OSX Clang 配置为对 include 语句区分大小写

c++ - 从嵌套类中对父类进行类型推导

python - 两个列表之间的最大值及其索引

python - 如何创建键: column_name and value : unique values in column in python from a dataframe的字典

c++ - 意外输出 : vector of vector (power set)

c++ - 为了性能,我应该更喜欢数组而不是 vector 吗?

c++ - vector vector 的段错误