我有一张 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/