簡體   English   中英

如何在std :: map容器中修改鍵值

[英]How to modify key values in std::map container

給定

std::map<int,std::string> myMap;
fillMyMapWithStuff(myMap);

// modify key values - I need to add a constant value to each key
for (std::map<int,std::string>::iterator mi=myMap.begin(); mi != myMap.end(); ++mi)
{
    // ...
}

什么是應用一些重新索引的好方法? 我必須刪除舊條目並添加具有新鍵和舊值的新條目嗎?

看起來您最好構建一個新地圖,然后再交換它。 您將只有n插入操作,而不是n刪除和n插入。

是的,您必須刪除舊條目並使用新密鑰添加一個新條目。 密鑰不可修改。

如果僅修改一個或幾個元素,則可以通過提示map::insert並包含新元素的位置來有效地進行修改。 由於新的密鑰是確保舊密鑰 ,可將位於某處,你可以用迭代暗示在舊元素點。 但是,您必須注意不要重新評估新插入的鍵(例如,從頭到尾進行迭代),並且在修改整個地圖的情況下,僅構建一個新的鍵會更有效。

是的,你必須。 鍵在地圖中時是const。

我認為您必須構建一張新地圖。 如果在循環中刪除並添加新鍵,則可能會破壞在一組舊鍵上進行迭代的完整性,並且不會觸摸剛剛插入的鍵。 (除非您知道密鑰的分配方式,並在其中放置自己的邏輯。)

std::map<int,std::string> myMap;
fillMyMapWithStuff(myMap);

std::map<int,std::string> newMap;

// modify key values - I need to add a constant value to each key
for (std::map<int,std::string>::iterator mi=myMap.begin(); mi != myMap.end(); ++mi)
{
    newMap[mi->first] = mi->second;
}

還有一個選擇。 如果此操作是集合的重要功能並且性能很重要,則可以避免完全復制地圖。 您可以創建一個類重載operator[]以及其他訪問器和修改器,並添加鍵值的當前移位。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM