Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C++中手动排序地图?_C++_Dictionary - Fatal编程技术网

如何在C++中手动排序地图?

如何在C++中手动排序地图?,c++,dictionary,C++,Dictionary,我有一个自定义类的映射,在某些情况下,我在映射中编辑键的值,而不将其从映射中取出。在做了这些更改之后,我想对映射重新排序,这样循环键的顺序就可以纠正键值的这种更改。但是,我希望这样做时不要删除元素并将其重新插入,因为我注意到每次插入都会重新排序,因为这是在循环中完成的,它会打乱迭代顺序。在我的循环完成后,有没有一种方法可以简单地对整个地图重新排序?我将使用地图的默认比较器来重新排序 edit*这是std::map如果您希望修改映射中的键而不必删除或插入映射中的元素,我将重新考虑您的方法。您正在尝

我有一个自定义类的映射,在某些情况下,我在映射中编辑键的值,而不将其从映射中取出。在做了这些更改之后,我想对映射重新排序,这样循环键的顺序就可以纠正键值的这种更改。但是,我希望这样做时不要删除元素并将其重新插入,因为我注意到每次插入都会重新排序,因为这是在循环中完成的,它会打乱迭代顺序。在我的循环完成后,有没有一种方法可以简单地对整个地图重新排序?我将使用地图的默认比较器来重新排序


edit*这是std::map

如果您希望修改映射中的键而不必删除或插入映射中的元素,我将重新考虑您的方法。您正在尝试执行std::map或任何关联容器都无法完成的操作。我想你是担心表现吧。地图中的插入和删除操作与查找操作类似。在循环中执行这种类型的工作在性能方面不会是一个大问题,但是如果您正在处理一段必须尽可能快地运行的关键代码,那么我可以看出您在这里可能更关心速度。

您是在谈论std::map吗?如果是这样,那么你不能这样做。如果没有,请提供更多详细信息。@juanchopanza是的,这是std::map。对不起,忘了包括在内。解决方法是添加虚拟元素并将其删除吗?因此,您不能这样做。您不能修改键,也不能更改给定类型地图元素的相对顺序。@juanchopanza我明白了。这很遗憾,但这是有道理的。谢谢。你想解决的实际问题是什么?本质上,你是在问两件你不能用映射做的事情:改变元素的键。如果你试图将映射保持在无序状态,你会得到一个编译器错误,这违反了它的一个基本不变量。映射中的元素总是被排序的。所以答案很可能是:不要使用映射或使用不同的算法,但是为了建议更好的数据结构/算法,我们需要知道,为什么您首先选择std::map。