Q
更新地圖
2
A
回答
2
加倍值可以是這樣的:
std::map<int,int> my_map;
for(auto& item:my_map){
item.second*=2; // double all values
}
然而,這是不可能的兩倍,因爲item
的Key
是從類型std::pair<const int,int>
。請注意0爲Key
。
建議:
我覺得std::map
是不是這種情況下,最好的容器。試試這個方法:
std::vector<std::pair<int,int>> my_simi_map;
for(auto& my_simi_map){
item.first*=2; // double all keys
item.second*=2; // double all values
}
編輯:
我關心的是節省存儲空間。
如果只是內存問題,那麼你可以從地圖中選擇一個項目,並在新地圖中插入一個加倍版本,並直接從舊地圖中刪除它。在這種情況下,您將忽略地圖的一個元素的大小,而不是整個另一個地圖的大小。
1
您可以按正向鍵的相反順序遍歷地圖,以規避副作用並創建新的鍵/值對。你可以做相同的否定鍵。
#include <cstdio>
#include <algorithm>
#include <map>
using namespace std;
int main() {
map<int, int> m = {
{10, 20},
{-5, 23},
{-10, 7},
{20, 30},
{15, 21},
{18, 2},
};
for (auto it = m.begin(); it != m.end() && it->first < 0; it = m.erase(it)) {
m[it->first * 2] = 2 * it->second;
}
for (auto it = m.rbegin(); it != m.rend() && it->first > 0; it++) {
m[it->first * 2] = 2 * it->second;
m.erase(----it.base());
}
for (auto &p: m) {
printf("%d, %d\n", p.first, p.second);
}
}
輸出:
-20, 14
-10, 46
20, 40
30, 42
36, 4
40, 60
相關問題
- 1. 更新地圖值
- 2. 更新地圖覆蓋圖
- 3. 更新地圖內的地圖
- 4. 如何更新地圖內的地圖?
- 5. 實時地圖更新
- 6. 更新仙丹地圖
- 7. 斯卡拉地圖更新
- 8. 平滑地更新位圖
- 9. jQuery更新谷歌地圖
- 10. Jackcess從地圖更新行
- 11. 更新嵌套地圖
- 12. 更新特定地圖
- 13. 更新谷歌地圖gui
- 14. Java中,更新地圖
- 15. 插入或更新地圖
- 16. 谷歌地圖更新地址
- 17. 更快速地更新圖像像素
- 18. 地圖放大更新更改
- 19. 谷歌地圖:更新圖片覆蓋
- 20. 更新圖表元素後刷新拓撲圖地圖
- 21. 更新我在Google地圖上新建的住宅地址
- 22. 更新了R「地圖」包的世界地圖?
- 23. 添加在listbuffer元素到地圖(更新地圖)
- 24. 更新價值觀地圖等地圖中的Java
- 25. 更新谷歌地圖標記不重建地圖
- 26. 在迭代地圖的同時更新地圖的值groovy
- 27. 的Clojure - 更新每個內部地圖中嵌套地圖
- 28. Android谷歌地圖上的NullPointer例外更新地圖
- 29. Google角度地圖不會正確更新地圖
- 30. 在地圖中更新矢量內的嵌套地圖
請出示你的代碼,請注意,修改你的地圖將使所有迭代器的鍵被用作該映射重新排序,也就是爲什麼你會想修改這樣的關鍵?你確定你想要一個'map'嗎? – EdChum
我不認爲,即使你發現這樣的事情,它會節省大量的內存或處理能力。最後,大部分功能只是在背景中做你想避免的事情。 – Sossenbinder
你的問題沒有很好的定義。加倍鑰匙可能會給你一個已經存在的元素的關鍵。你會增加哪個價值? – juanchopanza