作者yhn0tgb60 (呦厚厚)
看板C_and_CPP
標題Re: [STL ] map 會自動在最前面加空資料???
時間Sun Aug 23 16:07:30 2009
原諒我不用推文 用回文
因為真的很趕時間 怕用推文的大家看不到
請問一怎麼修改 map 裡面的key和value
我主要是想把 map 陣列中的兩個位置的內容互換
key和 value 都要互換
無法使用 [] 因為系統會再insert
也無法使用 iterator 因為那只是指標 而且又是const
星期一就要生成果 ~~~阿~~~沒時間了
不好意思 麻煩大家了 謝謝
※ 引述《yhn0tgb60 (呦厚厚)》之銘言:
: 我剛剛試了一個方法
: map <DWORD, Node>::iterator buf;
: buf=closelist.begin();
: 用 buf來進行運算
: 但是假如我想取的是map第5個陣列值
: 我用 buf=closelist.begin()+5;
: complie不會過
: 難道我要 buf++; 5次嗎???
: 請問有沒有更有效率的辦法
: find() 是搜尋key 但我現在要用的是取出陣列的某個位置
: 這有點不符合我的需求
: 麻煩大家了 謝謝
: ※ 引述《yhn0tgb60 (呦厚厚)》之銘言:
: : 我宣告了一個
: : STL的map 裡面的資料是擺一個struct
: : 而我每加一筆資料到map裡時
: : 會用minHeap排序 依照struct 裡面的某個float 的大小排序
: : 可是當我在比較map中的某兩個位置的 struct 中的某個float 的大小時
: : 系統卻會常常會自動在我的map陣列的最前面加入兩個或一個都是 0 的資料
: : 而且之後也不會自動刪除
: : 以下是我的部份程式碼
: : struct Node
: : {
: : int verID1;
: : int verID2;
: : float curCost;
: : float heuristic;
: : Node *parent;
: : };
: : inline DWORD GetKey( int verID1, int verID2 )
: : {
: : return ( MAKELONG( verID1, verID2 ));
: : }
: : inline int GetHeapParent( int i )
: : {
: : return ((i+1)/2-1);
: : }
: : map <DWORD, Node> closelist;
: : void Astar::InsertMinHeap( Node n)
: : {
: : closelist.insert( map< DWORD, Node>::
: : value_type( GetKey( n.verID1 ,n.verID2 ), n));
: : int curPose=closelist.size()-1;
: : while(TRUE)
: : {
: : int i=GetHeapParent( curPose );
: : if(i==-1)
: : break;
: : if((closelist[curPose].curCost+closelist[curPose].heuristic)<
: : (closelist[i].curCost+closelist[i].heuristic))
: : {
: : Node buf=closelist[curPose];
: : closelist[curPose]=closelist[i];
: : closelist[i]=buf;
: : curPose=i;
: : }
: : else
: : break;
: : }
: : }
: : 就是下面這兩行
: : "" if((closelist[curPose].curCost+closelist[curPose].heuristic)<
: : (closelist[i].curCost+closelist[i].heuristic)) ""
: : 常常會都自動再幫我加兩個或一個 資料都為0的map 而且加在最前面
: : 希望大家可以看的懂
: : 麻煩大家了 謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 60.248.163.42
1F:推 zerodevil:key和value都換 = 沒換 08/23 16:37
2F:→ yhn0tgb60:ㄟ 什麼意思阿 我的意思就是要改變陣列中的位置 08/23 16:45
3F:→ yhn0tgb60:為何會等於沒換 08/23 16:46
4F:→ tinlans:map 不是陣列,它內部是 tree 結構。 08/23 16:54
5F:→ tinlans:它是 unordered 特性,所以也沒有位置互換這回事。 08/23 16:56
6F:→ tinlans:把元素位置的概念套用在 map 上一開始就是一個錯誤。 08/23 16:57
7F:→ tinlans:如果真的需要用到位置,你應該自己做 associative array 08/23 17:00
8F:→ tinlans:,loki lib 裡面有提供一份實作,你會用的話。 08/23 17:01
9F:→ tinlans:同時想要 map 搜尋速度和 vector 的隨機存取性,可能就需 08/23 17:01
10F:→ tinlans:要使用 Boost.MultiIndex,但前提是你會安裝 Boost。 08/23 17:01
11F:→ yhn0tgb60:搞到現在 我也覺得我的觀念好像一開始就錯了XD 唉~~ 08/23 17:02
12F:→ yhn0tgb60:謝謝了 08/23 17:02