我有3個數據結構:隊列節點(struct
),隊列節點vector
和map
具有作爲字符串的鍵和指向隊列節點的指針。它們的定義如下:實現結構向量和指針結構的向量
隊列節點:
struct QNode{
int32_t index;
int32_t count;
};
矢量:
vector<QNode> n;
地圖:
map<string, QNode*> QueuePointerMap;
每當我創建一個節點時,我將它插入向量中,並將指針存儲到剛剛在映射中創建的節點中,並將該鍵作爲唯一字符串存儲。我使用下面的代碼可以這樣做:
n.push_back(QNode());
int insertIndex = n.size();
n[insertIndex-1].index = index-1;
n[insertIndex-1].count = 1;
cout << "***************************\n";
cout << "Insert index: " << insertIndex << "\n";
cout << "n[insertIndex -1].index: " << n[insertIndex -1].index << "\n";
cout << "n[insertIndex -1].count: " << n[insertIndex -1].count << "\n";
cout << "***************************\n";
QueuePointerMap[uniqStr] = &(n[insertIndex-1]);
cout << "Address of N: " << &(n[insertIndex-1]) << "\n\n";
每當我在載體中插入一個節點,它被正確地存儲在載體和地圖,我插入一個新的節點之後面臨的一個問題。每當我在矢量(和地圖)中插入一個新值,並且如果我嘗試獲取以前的值,我會得到與存儲的值不同的值。我用我的檢索值,下面的代碼:
map<string, QNode*>::iterator it1;
it1=QueuePointerMap.find(uniqStr);
if(it1 == QueuePointerMap.end()){
cout << "\n Not Found \n";
}
else{
QNode * n1 = it1->second;
cout << "Value of N1: " << n1 ;
cout << "\t Index: "<< (n1->index) << "\n Count: " << (n1->count) << "\n";
}
我不明白爲什麼我收到了指數的不同的價值觀和計數。我想我在插入時做了一些錯誤,但我無法弄清楚問題所在。我真的很感激,如果有人幫助我理解並解決這個問題。謝謝。
在將'uniqstr'值設置爲'QueuePointerMap'的關鍵字之前設置的位置/何時? –
我從用戶那裏得到它,並確保它的獨特性。如果不是,則上述操作不會發生。 – TheRookierLearner
嘗試使用調試器緩慢地將指針值存儲在另一個結構中和/或逐步緩存,並跟蹤指針值和QNode struct內部結構。請記住,矢量的[]運算符返回對該位置元素的引用。 [std :: vector :: operator \ [\]](http://en.cppreference.com/w/cpp/container/vector/operator_at) –