[英]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.